我在SwiftUI中遇到了一个奇怪的问题。 我创建了一个仅包含一个按钮的简单视图 和使用PageViewStyle的TabView。看来TabView不会更新其内容 是否正确取决于变量的状态。 内容似乎已经以某种方式进行了更新,但是View却无法按照我的期望进行更新
这是我的看法代码:
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发生更改,因此所有页面都将可滚动且可见,但是出于某种原因,只有页面指示器会更新它的状态。
答案 0 :(得分:7)
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)
}
}
}
}