1

所以,对于这个应用程序,我需要制作一个自定义样式的 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")
    }
}

在编译代码并开始模拟以查看它的外观时,我得到了循环错误 Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffee1f2aff8) 我尝试重命名类,希望它们可能重叠和案例,但从我的角度来看,我真的无法弄清楚为什么它会返回循环错误,因为我已经在其他应用程序中完成了自定义选项卡视图。帮助将不胜感激。谢谢!

4

2 回答 2

1

.在修饰符之前缺少 a 。代替

navigationTitle("Second")

.navigationTitle("Second")

也这样做navigationTitle("First")

于 2021-04-07T19:24:58.403 回答
0

您应该.FirstSecond中使用,也只需要在ContentViewNavigationView中使用一个ZStack

我更新了您不需要第一第二视图的代码,您只需要ContentViewCustomTabView


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
  
        }
    }
}
于 2021-04-07T19:32:19.340 回答