SwiftUI - 当以页面样式嵌入 TabView 时,NavigationStack 显示不正确

问题描述 投票:0回答:1

我有一个带有简单 NavigationStack 的视图,代码如下:

import SwiftUI

struct Parcels: View {

 @Binding var searchText : String

  var body: some View {
    NavigationStack{
        List{
          some code here...
        }
        .listStyle(.plain)
        .navigationTitle("Parcels")
        .navigationBarTitleDisplayMode(.automatic)
    }
    .searchable(text: $searchText, prompt: "Search")
  }
}

一切正常,预览看起来也不错。 该视图嵌入到具有页面样式的TabView中,代码如下:

import SwiftUI

struct MainView: View {

  @State private var selectedTab = 0

  var body: some View {
    TabView (selection: $selectedTab) {

        //MARK: First View with code posted above
        Parcels(searchText: $searchText)
            .tabItem {
                Label("Parcels", systemImage: "shippingbox.fill")
            }.tag(0).sensoryFeedback(.success, trigger: selectedTab == 0)
        
        //MARK: Second View
        Settings()
            .tabItem {
                Label("Settings", systemImage: "gearshape.fill")
            }.tag(1).sensoryFeedback(.success, trigger: selectedTab == 1)

    }
    .tabViewStyle(.page)
    .indexViewStyle(.page(backgroundDisplayMode: .always))
  }
}

问题在于名为“Parcels”的视图的 NavigationStack“.toolbar”修饰符在名为“MainView”的视图的预览中的外观:

为什么会这样呢? 为什么 NavigationStack 显示不正确? 此外,搜索栏未显示在 MainView.swift 文件中(它正确显示在 Parcels.swift 文件中)。 仅当在“.page”上设置 .tabViewStyle 时才会发生这种情况。

有什么建议吗? 谢谢。

更新: 如果我将“MainView.swift”文件的 TabView 嵌入到另一个 NavigationStack 中,NavigationStack 将正确显示。重点是标题始终显示为“内联”并且搜索栏始终不显示。

swiftui tabview
1个回答
0
投票

我找到了适合我的情况的解决方案。首先,创建 TabView,然后将每个子视图嵌入到导航堆栈中(请参阅示例代码):

@State private var selectedTab = 0

var body: some View {
    TabView(selection: $selectedTab){

     NavigationStack{
            FirstView()
     }.tag(0)

     NavigationStack{
            SecondView()
     }.tag(1)

     ...

    }

就像魅力一样!

© www.soinside.com 2019 - 2024. All rights reserved.