导航栏:“隐藏”标题,但为后续的后退按钮保留它
Posted
技术标签:
【中文标题】导航栏:“隐藏”标题,但为后续的后退按钮保留它【英文标题】:Navigation bar: "hide" title but keep it for the subsequent back button 【发布时间】:2021-05-10 11:29:27 【问题描述】:在我的应用中,我有两个 SwiftUI 视图,我们称它们为 View1 和 View2。 View1 以 UIHostingController 的形式启动,并有一个“转到 View2”按钮,该按钮将 View2 推到提到的 UIHostingController 的导航控制器上(没有 SwiftUI 导航链接等)。
View1 必须显示导航栏,因为它在工具栏中有一个自定义的“退出”按钮。 View2 应该显示通向 View1 的“ 问题: 如果我将 UIHostingController 的导航栏标题设置为“”,那么
不会有“ 如果我将 UIHostingController 的导航栏标题设置为
“Back”,那么回来后View1会在“Back”中显示“Back”
导航栏的中间。 如果我一开始隐藏导航栏,那么“退出”按钮将不会出现
显示。 所以,总而言之,我需要的是:
View1 仅显示带有“退出”工具栏按钮的导航栏,没有标题。
View2 仅显示“ 我怎样才能实现它? 注意:整个导航逻辑是用 UIKit 完成的。 View1 通知视图模型,该视图模型调用将 View2 推送到导航堆栈的委托。没有 SwiftUI 导航链接等。
【问题讨论】:
【参考方案1】:您可能需要考虑一个隐藏的导航链接,以便获得您正在寻找的推送行为。这将为您留下以下观点;
struct View1: View
@State private var isActive = false
var body: some View
NavigationView
VStack
Button("Present")
isActive = true
NavigationLink(destination: View2(), isActive: $isActive)
EmptyView()
.hidden()
.toolbar(content:
Button("Exit")
print("Exit view")
)
struct View2: View
var body: some View
NavigationView
Text("View 2")
您的第一个视图将使用按钮通过推送动画呈现视图 2。为您提供您正在寻找的后退按钮行为。您的第一个视图将在右上角的工具栏中没有标题和退出按钮。
【讨论】:
不幸的是,包括工具栏按钮在内的整个导航逻辑都是通过 UIHostingController 完成的,并且必须保留。 swift UI 中不允许使用导航链接,因为这会与已经存在的导航控制器混淆,这可能会导致奇怪的问题。 好的,所以你基本上想从 swiftUI 中操作 UIKit 导航栏。但我不确定这种方法在这里是否正确。您将不得不做很多自定义工作来保持默认的 ios 行为。我会将退出按钮和它的逻辑添加到您的 SwiftUI 视图中。然后您可以将view1
呈现为UIHostedViewController
并在SwiftUI 中保留默认导航栏行为。如果这不可能,您能否提供一个复制问题的小示例?以上是关于导航栏:“隐藏”标题,但为后续的后退按钮保留它的主要内容,如果未能解决你的问题,请参考以下文章