Xcode 12 beta 5 引入了新的功能,使得本软件包不再必要。请不要使用。:)
此软件包让 navigationTitle 和 ToolbarItemPlacement.principal 能够协同工作
让你的梦想成真!
添加到你的 Package.swift 文件中
let package = Package(
...
dependencies = [
.package(url: "https://github.com/amonshiz/NavigationTitle.git", Package.Dependency.Requirement.branch("main")),
...
],
targets = [
.target(
name: "YourTarget",
dependencies: ["NavigationTitle", …],
...),
...
]
)
https://github.com/amonshiz/NavigationTitle.gitmain 分支 (我不保证标签会及时更新)import SwiftUI
import NavigationTitle
struct ContentView: View {
@Namespace var aNamespace // required
var body: some View {
NavigationView {
// Does not need to be a list, but this is does demonstrate the `.large`
// style title behaviors best
List {
Text("Hello, world").padding()
}
// Used in the same place the usual `.navigationTitle(_)` or
// `.navigationBarTitle(_)` would be used
.navigationTitle("A Great Title", within: aNamespace)
}
// Should be used *on* the navigation stack to track
.rootNavigationBarIdentified(within: aNamespace)
}
}
.navigationTitle(_:within:) 尽可能地放置在每个视图的顶层。理想情况下,它应该应用于作为 NavigationView 直接子视图的视图。View 类型作为 NavigationLink 的 destination,而不是内联定义目的地。这确保了评估 View.body 属性的顺序与它们将被显示的顺序相匹配。.navigationTitle() 与此软件包混合使用,这已经过测试,但可能存在边缘情况。如果出现问题,请提交 Issue!在 SwiftUI 中,有方便的 toolbar 和 toolbarItem API,允许开发者轻松地将内容添加到工具栏和导航栏,并定义该内容应出现在栏中的语义位置。此外,SwiftUI 使得使用 navigationBarTitleDisplayMode 更改导航标题显示模式非常容易。然而,显示模式和工具栏项目 API 之间至少存在一个冲突:对于 large 或 automatic 显示模式,放置在 principal 位置的任何内容都不会显示。
用例类似于 Phone.app UI 中的 "Recents" 选项卡。 
使用 UIViewConrollerRepresentable 直接连接到下面的 UIKit 对象,并将所需的文本插入到视图控制器及其相关的 navigationItem 中。在这种情况下,该软件包正在用一个内部实现替换“根”导航控制器中的 UINavigationControllerDelegate 实例,该内部实现设置任何被推送的且尚未拥有标题的视图控制器的 title 和它的 navigationItem。这个内部委托还维护了对任何现有委托的 weak 引用,并将根据需要将所有消息转发给它。
[Assert](此处记录了反馈),所以请注意这并非由此软件包引起!