Вид стека навигации не работает в пользовательском интерфейсе Swift, содержащем вкладки?

1
8

У меня есть проект с представлениями вкладок. Я пытаюсь реализовать переход сцены или навигацию с одного экрана на другой. У меня есть несколько вкладок и некоторые другие представления, встроенные в ZStack. Я пытаюсь сделать навигацию, но NavigationLink не запускает навигацию, хотя она выглядит правильно подключенной к navigationDestination, который должен обрабатывать переход.

Вот code;

var body: some View {
    NavigationStack {
        ZStack {
            // ViewPager alternative
            TabView(selection: $selectedTab) {
                ForEach(0..<3) { index in
                    switch index {
                    case 0:
                        CollectionTabView()
                        
                    case 1:
                        ExploreTabView()
                            .background {
                                if !offsetObserver.isObserving {
                                    FindCollectionView {
                                        offsetObserver.collectionView = $0
                                        offsetObserver.observe()
                                    }
                                }
                            }
                        
                    case 2:
                        FavoriteTabView()
                        
                    default: ExploreTabView()
                    }
                }
            }
            .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .onChange(of: selectedTab) {
                isSelected = true
            }
            
            VStack(spacing: 0) {
                // Top header section
                VStack(spacing: 0) {
                    Spacer().frame(height: 48)
                    HStack(spacing: 8) {
                        
                        NavigationLink(value: "PROFILE") {
                            imageActionView(imageName: .aiProfile, tint: .icon)
                        }
                        
                        Spacer()
                        
                        NavigationLink(value: "PROFILE") {
                            imageActionView(imageName: .aiSearch, tint: .icon)
                        }
                        
                    }
                    .padding(.horizontal, 24)
                    .padding(.vertical, 16)
                    
                }
                .frame(height: 100)
                .background(LinearGradient(colors: [Color.bgdDark, Color.clear], startPoint: .top, endPoint: .bottom))
                
                Spacer()
            }
            
            // Bottom AppBar
            VStack {
                Spacer()
                VStack {
                    ZStack {
                        Tabbar(.app)
                            .overlay {
                                GeometryReader {
                                    
                                    let width = $0.size.width
                                    let tabCount: CGFloat = 3
                                    let capsuleWidth = width / 3
                                    
                                    // Determine progress based on whether the tab is selected or not
                                    let progress = isSelected
                                    ? offsetObserver.offset / (offsetObserver.collectionView?.bounds.width ?? 1)
                                    : CGFloat(selectedTab) / CGFloat(tabCount - 2)
                                    
                                    
                                    Circle()
                                        .fill(.app)
                                        .frame(width: capsuleWidth)
                                        .offset(x: progress * capsuleWidth)
                                    
                                    Tabbar(.white)
                                        .mask(alignment: .leading) {
                                            Circle()
                                                .frame(width: capsuleWidth)
                                                .offset(x: progress * capsuleWidth)
                                        }
                                    
                                    
                                }
                                .allowsTightening(false)
                            }
                            .padding([.top, .bottom], 8)
                            .padding(.horizontal, 24)
                    }
                    .background(Color.bgdDark)
                    .clipShape(RoundedRectangle(cornerRadius: 18))
                    .padding(.horizontal, 74)
                    .shadow(color: Color("txtLightColor").opacity(0.3), radius: 3, x: 0, y: 3)
                    
                    Spacer().frame(height: 24)
                }
                .frame(maxWidth: .infinity)
                .background(LinearGradient(colors: [Color.bgdDark, Color.clear], startPoint: .bottom, endPoint: .top))
            }
            
        }
        .background(Color.bgdDark)
        .edgesIgnoringSafeArea(.all)
    }
    .navigationDestination(for: String.self) { value in
        if value == "PROFILE" {
            LoginView()
        }
    }
    
}
Емельян
Вопрос задан16 августа 2024 г.

1 Ответ

2
Юрий
Ответ получен14 сентября 2024 г.

Ваш ответ

Загрузить файл.