SwiftUI:TabView 只能在没有绑定的情况下正常工作(点不会改变)
SwiftUI: TabView only works properly without binding (dots don't change)
这里有一个奇怪的问题 - 要么是错误,要么是我遗漏了一些简单的东西。
我正在创建 TabView {}
和 PageTabViewStyle()
。它工作完美,请看下面并注意底部的点(表示选择了哪个页面的点 - 请忽略奇怪的故障,这只是由于 gif 动画压缩)
但是,一旦我添加了一个绑定变量来跟踪所选内容,指示器点就不再改变(而且所选页面也未被跟踪)。
工作版本代码:
import SwiftUI
struct ContentView: View {
var body: some View {
TabView() {
SomePage(text:"page 1")
SomePage(text:"page 2")
SomePage(text:"page 3")
}.tabViewStyle(PageTabViewStyle())
.background(Color.gray)
}
}
点不更新的代码:
import SwiftUI
struct ContentView: View {
@State var selected = 0
var body: some View {
TabView(selection: $selected) {
SomePage(text:"page 1")
SomePage(text:"page 2")
SomePage(text:"page 3")
}.tabViewStyle(PageTabViewStyle())
.background(Color.gray)
}
}
不知道为什么会这样。有人能帮忙吗?谢谢!
你只需要在每个页面添加一个.tag()
,像这样:
struct TabViewTest: View {
@State var selected = 0
var body: some View {
TabView(selection: $selected) {
Color.red.edgesIgnoringSafeArea(.all)
.tag(0)
Color.blue.edgesIgnoringSafeArea(.all)
.tag(1)
Color.orange.edgesIgnoringSafeArea(.all)
.tag(2)
}
.tabViewStyle(PageTabViewStyle())
}
}
这里有一个奇怪的问题 - 要么是错误,要么是我遗漏了一些简单的东西。
我正在创建 TabView {}
和 PageTabViewStyle()
。它工作完美,请看下面并注意底部的点(表示选择了哪个页面的点 - 请忽略奇怪的故障,这只是由于 gif 动画压缩)
但是,一旦我添加了一个绑定变量来跟踪所选内容,指示器点就不再改变(而且所选页面也未被跟踪)。
工作版本代码:
import SwiftUI
struct ContentView: View {
var body: some View {
TabView() {
SomePage(text:"page 1")
SomePage(text:"page 2")
SomePage(text:"page 3")
}.tabViewStyle(PageTabViewStyle())
.background(Color.gray)
}
}
点不更新的代码:
import SwiftUI
struct ContentView: View {
@State var selected = 0
var body: some View {
TabView(selection: $selected) {
SomePage(text:"page 1")
SomePage(text:"page 2")
SomePage(text:"page 3")
}.tabViewStyle(PageTabViewStyle())
.background(Color.gray)
}
}
不知道为什么会这样。有人能帮忙吗?谢谢!
你只需要在每个页面添加一个.tag()
,像这样:
struct TabViewTest: View {
@State var selected = 0
var body: some View {
TabView(selection: $selected) {
Color.red.edgesIgnoringSafeArea(.all)
.tag(0)
Color.blue.edgesIgnoringSafeArea(.all)
.tag(1)
Color.orange.edgesIgnoringSafeArea(.all)
.tag(2)
}
.tabViewStyle(PageTabViewStyle())
}
}