问题描述
所以,对于这个应用程序,我需要制作一个自定义样式的 tabview,我已经开始使用下面的代码
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) 我尝试重命名类,希望它们可能会重叠和案例,但从我的角度来看,我真的无法弄清楚为什么它会返回循环错误,因为我已经在其他应用程序中完成了自定义 tabviews。帮助将不胜感激。谢谢!
解决方法
您在修饰符之前缺少 .
。替换
navigationTitle("Second")
与
.navigationTitle("Second")
也为 navigationTitle("First")
执行此操作。
您应该在First 和Second 中使用.
,并且您也只需要在NavigationView 和ZStack
强>内容视图
我更新了您的代码,您不需要第一和第二视图,您只需要ContentView和自定义标签视图
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
}
}
}