Я работаю над SwiftUI TabView со стилем .page (indexDisplayMode: .never). Я хочу отслеживать свойство minX представления каждой вкладки с помощью GeometryReader. Однако я заметил непоследовательное поведение при прокрутке между страницами.
Вот упрощенный код:
Я работаю над SwiftUI TabView со стилем .page (indexDisplayMode: .never). Я хочу отслеживать свойство minX представления каждой вкладки с помощью GeometryReader. Однако я заметил непоследовательное поведение при прокрутке между страницами. Вот упрощенный код: [code]import SwiftUI
struct ContactScreenView: View { let text: String var body: some View { ZStack { Color.red.opacity(0.4).ignoresSafeArea()
struct DemoView: View { @State private var selectedTab: Int = 0 var body: some View { VStack { TabView(selection: $selectedTab) { ContactScreenView(text: "followers") .background( GeometryReader(content: { geometry -> Color in let minX = geometry.frame(in: .global).minX print(minX) return Color.clear }) ) .tag(0) ContactScreenView(text: "following") .tag(1) ContactScreenView(text: "blocked") .tag(2) ContactScreenView(text: "Shared") .tag(3) } .tabViewStyle(.page(indexDisplayMode: .never)) } } }
#Preview { DemoView() } [/code] Наблюдаемое поведение: [list] [*]Когда я прокручиваю вторую страницу (индекс 1), значение minX корректно обновляется до screenWidth * 1, как и ожидалось.
[*]Когда я прокручиваю третью страницу (индекс 2), значение minX не обновляется. вообще обновить.
[*]Идеальным поведением для minX было бы обновление до screenWidth * 2 для третьей страницы и так далее для последующих страниц.
< /ol> Ожидаемое поведение:
[*]Значение minX должно правильно отражать глобальное положение каждой страницы при прокрутке TabView. Например: [*]Страница 0: minX = 0 [*]Страница 1: minX = screenWidth * 1 [*] Страница 2: minX = screenWidth * 2 [*]И так далее. [/list]