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 导航