"PageTabViewStyle"이 포함 된 TabView는 @State var가 변경 될 때 콘텐츠를 업데이트하지 않습니다.
Aug 20 2020
SwiftUI에서 이상한 문제를 발견했습니다. Button과 PageViewStyle을 사용하는 TabView 만있는 간단한보기를 만들었습니다. TabView가 변수의 상태에 따라 내용을 올바르게 업데이트하지 않는 것 같습니다. 콘텐츠가 어떻게 든 업데이트되는 것 같지만보기가 예상대로 업데이트되지 않습니다.
내 견해의 코드는 다음과 같습니다.
struct ContentView: View {
@State var numberOfPages: Int = 0
@State var selectedIndex = 0
var body: some View {
VStack {
Text("Tap Me").onTapGesture(count: 1, perform: {
self.numberOfPages = [2,5,10,15].randomElement()!
self.selectedIndex = 0
})
TabView(selection: $selectedIndex){
ForEach(0..<numberOfPages, id: \.self) { index in
Text("\(index)").background(Color.red)
}
}
.frame(height: 300)
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .automatic))
}.background(Color.blue)
}
}
라벨을 여러 번 탭한 후의 결과입니다. 초기 상태는 0 페이지가 아닙니다. 탭한 후 TabView의 내용이 변경되어 모든 페이지를 스크롤 할 수 있고 볼 수 있지만 페이지 표시기 만 어떤 이유로 든 상태를 업데이트합니다.

답변
7 Asperi Aug 20 2020 at 07:16
TabView
페이지의 컨테이너가있을 것으로 예상하지만 하나 HStack
(동적 콘텐츠 포함) 만 포함하고 탭보기를 재설정해야하는 페이지 수를 연결하므로 여기에 수정 사항이 있습니다.
Xcode 12 / iOS 14로 테스트 됨

struct ContentView: View {
@State var numberOfPages: Int = 0
var body: some View {
VStack {
Text("Tap Me").onTapGesture(count: 1, perform: {
self.numberOfPages = [2,5,10,15].randomElement()!
})
if self.numberOfPages != 0 {
TabView {
ForEach(0..<numberOfPages, id: \.self) { index in
Text("\(index)").frame(width: 300).background(Color.red)
}
}
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .automatic))
.frame(height: 300)
.id(numberOfPages)
}
}
}
}