微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决SwiftUI ContentView 循环问题 - 线程 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) 我尝试重命名类,希望它们可能会重叠和案例,但从我的角度来看,我真的无法弄清楚为什么它会返回循环错误,因为我已经在其他应用程序中完成了自定义 tabviews。帮助将不胜感激。谢谢!

解决方法

您在修饰符之前缺少 .。替换

navigationTitle("Second")

.navigationTitle("Second")

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

,

您应该在FirstSecond 中使用.,并且您也只需要在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
  
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。