在 SwiftUI 中的导航栏标题下方添加附件视图

Jay*_*Lee 9 uinavigationbar ios swift swiftui swiftui-navigationview

I\xe2\x80\x99m 尝试添加嵌入导航栏中的附件视图标题下方导航栏中的附件视图,该视图可以在默认的 iOS 日历应用程序中看到(\xe2\x80\x9cs mtwtfs\xe2\x80\x9d 行)或GitHub 移动应用程序:

\n

生长激素1生长激素1

\n

我\xe2\x80\x99d 喜欢它与 GH mobile 等大型标题样式导航栏一起使用。

\n

LazyVStack\xe2\x80\x99spinnedView带有节标题几乎可以工作,但我可以 \xe2\x80\x99t 获取背景颜色以使其与导航栏无缝连接,即使使用ultraThinMaterial. 它还在固定视图和栏之间留下了分隔线。

\n

有没有办法实现这种布局?\n欢迎使用 SwiftUI、SwiftUI+ Introspect和 UIKit 中的解决方案!

\n

Sco*_*man 9

您是否尝试过设置.safeAreaInset视图?这将具有您正在寻找的粘性,并且视图“主要”部分中的项目在渲染时将考虑其高度,因此不会被遮挡。

\n

这是我举出的一个简单例子:

\n
struct ContentView: View {\n    var body: some View {\n      NavigationView {\n        List {\n          ForEach(0 ..< 30) { item in\n            Text("Hello, world!")\n          }\n        }\n        .navigationTitle("Accessory View")\n        .safeAreaInset(edge: .top) {\n          AccessoryView()\n        }\n      }\n    }\n}\n\nstruct AccessoryView: View {\n  var body: some View {\n    HStack {\n      Button("Button") { }\n      Button("Button") { }\n      Button("Button") { }\n      Spacer()\n    }\n    .padding()\n    .background(Color(uiColor: .systemGroupedBackground))\n    .buttonStyle(.bordered)\n    .controlSize(.mini)\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

您必须为视图提供背景,否则它将是透明的 \xe2\x80\x93 但该背景(只要它是颜色或材质)会自动延伸到导航栏本身。这是上面代码实际运行的 GIF,我将背景设置为与分组列表的背景相匹配:

\n

在此输入图像描述

\n

它并不完美,特别是因为它看起来与滚动的导航栏不同,但它可能对您有用?

\n

  • 我不知道“safeAreaInset”视图修饰符。虽然我得到了我想要的东西,但使用带有几何阅读器的单节 LazyVStack 在空背景(大标题)和“Material.bar”(内联标题)之间进行选择,我看到了可以在哪里使用此解决方案。主要缺点是辅助视图不会随着大标题向下滚动。 (2认同)