TabView 在 iOS13 SwiftUI 上无法正常工作
TabView does not work correctly on iOS13 SwiftUI
我创建了一个包含 4 个项目的 TabView,但是 iOS 13.x 只有第一个视图可以正确显示。
当我单击另一个项目的图标时,视图未正确显示,但应用程序仅显示白色视图。如果我 运行 上的应用 iOS > 14 我可以正确查看所有视图。
TabView 实现:
struct ContentView: View {
private enum Tab: Hashable {
case discovery
case qrcode
case devices
case settings
}
@State private var selectedTab: Tab = .discovery
var body: some View {
NavigationView {
TabView(selection: $selectedTab) {
DiscoveryView()
.tabItem {
VStack {
Image(systemName: "lock.rotation.open")
Text("Discovery")
}
}
.tag(0)
QrCodeView()
.tabItem {
VStack {
Image(systemName: "qrcode.viewfinder")
Text("QrCode")
}
}
.tag(1)
DevicesView()
.tabItem {
VStack {
Image(systemName: "qrcode.viewfinder")
Text("My devices")
}
}
.tag(2)
SettingsView()
.tabItem {
VStack {
Image(systemName: "gear")
Text("Settings")
}
}
.tag(3)
}
}
}
其中一个观点的实现:
struct QrCodeView: View {
var body: some View {
Text("QrCode")
}
}
我哪里做错了?
可能是selection
的原因...selection
和tag
类型应该是一样的,所以试试
@State private var selectedTab: Tab = .discovery
var body: some View {
NavigationView {
TabView(selection: $selectedTab) {
DiscoveryView()
.tabItem {
VStack {
Image(systemName: "lock.rotation.open")
Text("Discovery")
}
}
.tag(.discovery) // << here !!
QrCodeView()
.tabItem {
VStack {
Image(systemName: "qrcode.viewfinder")
Text("QrCode")
}
}
.tag(.qrcode) // << here !!
// ... others the same
我创建了一个包含 4 个项目的 TabView,但是 iOS 13.x 只有第一个视图可以正确显示。 当我单击另一个项目的图标时,视图未正确显示,但应用程序仅显示白色视图。如果我 运行 上的应用 iOS > 14 我可以正确查看所有视图。
TabView 实现:
struct ContentView: View {
private enum Tab: Hashable {
case discovery
case qrcode
case devices
case settings
}
@State private var selectedTab: Tab = .discovery
var body: some View {
NavigationView {
TabView(selection: $selectedTab) {
DiscoveryView()
.tabItem {
VStack {
Image(systemName: "lock.rotation.open")
Text("Discovery")
}
}
.tag(0)
QrCodeView()
.tabItem {
VStack {
Image(systemName: "qrcode.viewfinder")
Text("QrCode")
}
}
.tag(1)
DevicesView()
.tabItem {
VStack {
Image(systemName: "qrcode.viewfinder")
Text("My devices")
}
}
.tag(2)
SettingsView()
.tabItem {
VStack {
Image(systemName: "gear")
Text("Settings")
}
}
.tag(3)
}
}
}
其中一个观点的实现:
struct QrCodeView: View {
var body: some View {
Text("QrCode")
}
}
我哪里做错了?
可能是selection
的原因...selection
和tag
类型应该是一样的,所以试试
@State private var selectedTab: Tab = .discovery
var body: some View {
NavigationView {
TabView(selection: $selectedTab) {
DiscoveryView()
.tabItem {
VStack {
Image(systemName: "lock.rotation.open")
Text("Discovery")
}
}
.tag(.discovery) // << here !!
QrCodeView()
.tabItem {
VStack {
Image(systemName: "qrcode.viewfinder")
Text("QrCode")
}
}
.tag(.qrcode) // << here !!
// ... others the same