带有 "PageTabViewStyle" 的 TabView 在 @State var 更改时不会更新其内容
TabView with "PageTabViewStyle" does not update it's content when @State var changes
我在 SwiftUI 中遇到了一个奇怪的问题。
我创建了一个只包含一个按钮的简单视图
和一个使用 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 发生变化,因此所有页面都可以滚动和可见,但由于某些原因,只有页面指示器会更新它的状态。
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) // << here !!
}
}
}
}
我在 SwiftUI 中遇到了一个奇怪的问题。 我创建了一个只包含一个按钮的简单视图 和一个使用 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 发生变化,因此所有页面都可以滚动和可见,但由于某些原因,只有页面指示器会更新它的状态。
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) // << here !!
}
}
}
}