SwiftUI ContentView循环问题-线程1:EXC_BAD_ACCESS



因此,对于这个应用程序,我需要制作一个自定义样式的选项卡视图,我已经从下面的代码开始

import SwiftUI
enum Tab{
case first
case second
}
struct ContentView: View {
@State private var selectedTab: Tab = .first
var body: some View {
VStack{
switch selectedTab {
case .first:
NavigationView{
First()
}
case .second:
NavigationView{
Second()
}
}



CustomTabView(selectedTab: $selectedTab)
}
}
}
struct CustomTabView: View{
@Binding var selectedTab: Tab
var body: some View {
HStack{
Button {
selectedTab = .first
} label:{
VStack{
Image(systemName: "film")
.resizable()
.scaledToFit()
.frame(width:25,height: 25)

Text("First")
.foregroundColor(.primary)


}

}
Button {
selectedTab = .second
} label:{
VStack{
Image(systemName: "house")
.resizable()
.scaledToFit()
.frame(width:25,height: 25)

Text("Second")
.foregroundColor(.primary)
}
}

}
}
}
struct First: View{
var body: some View{
Color(.systemGray6).ignoresSafeArea()
navigationTitle("First")
}
}
struct Second: View{
var body: some View{
Color(.systemGray4).ignoresSafeArea()
navigationTitle("Second")
}
}

在编译代码并开始模拟以查看其外观时,我得到了循环错误线程1:EXC_BAD_ACCESS(代码=2,地址=0x7ffee1f2aff8(我尝试重命名类,希望它们可能重叠和大小写,但从我的角度来看,我真的不明白为什么它会返回循环错误,因为我已经在其他应用程序中完成了自定义选项卡视图。非常感谢您的帮助。非常感谢。

修饰符前面缺少一个.。更换

navigationTitle("Second")

带有

.navigationTitle("Second")

navigationTitle("First")也执行此操作。

您应该在FirstSecond中使用.,而且您只需要在ContentView中使用一个NavigationViewZStack

我更新了您的代码,您需要第一个第二个Views,您只需要ContentView以及CustomTabView


struct ContentView: View {

@State private var selectedTab: Tab = .first

var body: some View {

NavigationView{     // <<: Here

ZStack {        // <<: Here
Color(selectedTab == .first ? .systemGray6 : .systemGray4).ignoresSafeArea() // <<: Here
CustomTabView(selectedTab: $selectedTab)

}
.navigationTitle( selectedTab == .first ? "First" : "Second") // <<: Here
.animation(.easeInOut, value: selectedTab) // <<: Here

}
}
}

最新更新