SwiftUI TabView со стилем .page: GeometryReader minX не обновляется при прокрутке страницыIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 SwiftUI TabView со стилем .page: GeometryReader minX не обновляется при прокрутке страницы

Сообщение Anonymous »

Я работаю над SwiftUI TabView со стилем .page (indexDisplayMode: .never). Я хочу отслеживать свойство minX представления каждой вкладки с помощью GeometryReader. Однако я заметил непоследовательное поведение при прокрутке между страницами.
Вот упрощенный код:

Код: Выделить всё

import SwiftUI

struct ContactScreenView: View {
let text: String
var body: some View {
ZStack {
Color.red.opacity(0.4).ignoresSafeArea()

VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text(text)
}
.padding()
}
}
}

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()
}
Наблюдаемое поведение:
  • Когда я прокручиваю вторую страницу (индекс 1), значение minX корректно обновляется до screenWidth * 1, как и ожидалось.
  • Когда я прокручиваю третью страницу (индекс 2), значение minX не обновляется. вообще обновить.
  • Идеальным поведением для minX было бы обновление до screenWidth * 2 для третьей страницы и так далее для последующих страниц.

    < /ol>
    Ожидаемое поведение:
  • Значение minX должно правильно отражать глобальное положение каждой страницы при прокрутке TabView. Например:
  • Страница 0: minX = 0
  • Страница 1: minX = screenWidth * 1
  • Страница 2: minX = screenWidth * 2
  • И так далее.


Подробнее здесь: https://stackoverflow.com/questions/793 ... page-scrol
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»