SwiftUI ContentView 循环问题 - 线程 1:EXC_BAD_ACCESS
SwiftUI ContentView Loop Issue - Thread 1: EXC_BAD_ACCESS
所以,对于这个应用程序,我需要制作一个自定义样式的 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)
我尝试重命名 类 以希望它们可能重叠和大小写,但从我的角度来看,我真的无法弄清楚为什么它会返回循环错误,因为我已经在其他应用程序中完成了自定义选项卡视图。帮助将不胜感激。谢谢!
修饰符前缺少 .
。替换
navigationTitle("Second")
与
.navigationTitle("Second")
navigationTitle("First")
也这样做。
你应该在第一个和第二个中使用.
,你也只需要使用一个NavigationView
ZStack
在 ContentView
中
我更新了你的代码,你不需要需要第一个和第二个视图,你只需要 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
}
}
}
所以,对于这个应用程序,我需要制作一个自定义样式的 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) 我尝试重命名 类 以希望它们可能重叠和大小写,但从我的角度来看,我真的无法弄清楚为什么它会返回循环错误,因为我已经在其他应用程序中完成了自定义选项卡视图。帮助将不胜感激。谢谢!
修饰符前缺少 .
。替换
navigationTitle("Second")
与
.navigationTitle("Second")
navigationTitle("First")
也这样做。
你应该在第一个和第二个中使用.
,你也只需要使用一个NavigationView
ZStack
在 ContentView
我更新了你的代码,你不需要需要第一个和第二个视图,你只需要 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
}
}
}