SwiftUI NavigationView 嵌套栏问题

Posted

技术标签:

【中文标题】SwiftUI NavigationView 嵌套栏问题【英文标题】:SwiftUI NavigationView nested bar issue 【发布时间】:2021-03-17 16:31:10 【问题描述】:

我有一个带有导航链接列表的视图,并向 DetailView 显示项目列表,DetailView 可以转到另一个视图,依此类推。因此,它将在此处具有完整的导航堆栈。

但是,在我们的应用中,我们有两种方式来展示这个视图,第一种是展示视图来展示这个视图。其次,通过另一个NavigationView下的其他navigationLink来推送到这个view。在第一种情况下,这很好。但是在第二种情况下,它会显示嵌套导航栏,我不太喜欢它。

有没有任何可能的方式来显示以下视图而没有任何嵌套的导航栏,以推送和呈现(UIKit 措辞)的方式

    var body: some View 
        NavigationView 
            List(items)  item in
                NavigationLink(destination: DetailView(item)) 
                   ItemRow(item)
                
            
            .navigationBarTitle("Item list")
        
    

非常感谢!

【问题讨论】:

只需将此视图分成两个:一个仅包含列表,第二个导航视图包含第一个。 @Asperi 假设这个视图被分隔在另一个 pod 中,调用者对该视图了解不多。在我看来,如何检测其父视图是推送它还是呈现它?或者换句话说,如何知道父视图已经有 NavigationView? 在“DetailView”中有一个 NavigationView 吗?如果是,则将其删除,因为这可能是问题所在。每个堆栈只能有一个 NavigationView。 【参考方案1】:

正如 Asperi 所说,您必须将 View 分成两个 Views。您拥有双倍的NavigationBar,因为如果您已经在View 层次结构的顶层输入了先前的NavigationView,那么拥有另一个NavigatioView 会使它成为NavigationBar 的两倍。

你必须在View之前做这样的事情:


var body: some View 

    VSTack 
      Text("Hello Word")

      Button(action: 
        if isShowWithPresent  // Some Bool
           NavigationView 
             SomeView()
           
         else 
          AnotherView() // Some View without the NavigationView in the code
        
      ) 
         Text("Hit Me!")
      
    
 

【讨论】:

以上是关于SwiftUI NavigationView 嵌套栏问题的主要内容,如果未能解决你的问题,请参考以下文章

深度编程 SwiftUI NavigationView 导航

SwiftUI制作View可嵌套组件

NavigationView 的内容未显示 SwiftUI

SwiftUI:如何更改 NavigationView 的色调(背景颜色)?

NavigationView高度不规则swiftui

SwiftUI NavigationView 不记得状态