在 swiftUI 中,如何仅删除 NavigationBarTitle 的安全区域?
Posted
技术标签:
【中文标题】在 swiftUI 中,如何仅删除 NavigationBarTitle 的安全区域?【英文标题】:In swiftUI, How to remove ONLY safe area of NavigationBarTitle? 【发布时间】:2020-04-24 02:44:35 【问题描述】:我的目标是将navigationBaritems
(用于按钮)与nabigationBarTitle
(用于标题)嵌入同一行。但是navigationBarTitle
是navigationBarItems.
的下划线
所以我没有使用navigationBarTitle,而是修改了如下代码:navigationBarItems(leading: Text("Title"), trailing: Button(action: ) Text("Button1"))
现在标题和按钮对齐在同一行,但问题是NavigationBarTitle
的安全区域。
我尝试过的事情:
我尝试使用navigationBarHidden(true)
删除它,但它删除了所有navigationBarItems
并且esgesIgnoringSafeArea 也删除了navigationBarItems
的safearea
。并且也考虑过使用displaymode: .inline
,但是看起来不太好。
如何在此处仅删除 navigationBarTitle 的 safearea
?
我当前的代码:
struct ContentView: View
var body: some View
NavigationView
VStack
HStack
Text("dd")
.frame(width: 500, height: 300)
.background(Color.blue)
Spacer()
.navigationBarItems(leading: Text("Title"), trailing: Button(action:
//some action
)
Text("Button")
)
【问题讨论】:
【参考方案1】:有时我认为 SwiftUI 可能不直观,但这里有一些建议:
尝试在您的 .background(Color.blue)
行之后添加以下行:
.navigationBarTitle("", displayMode: .inline)
将标题更改为非空字符串以查看.inline
在做什么。尝试将, displayMode: .inline
也拿出来。那个大标题是试图填补你在 VStack 上看到的所有空白空间。如果你想要一个自定义导航栏,你也可以尝试.navigationBarHidden(true)
(虽然你可能不想要那个,但尝试起来仍然很有趣)。
编辑:我知道你说过你尝试过其中一些事情。关键是您将我上面列出的那行放在哪里。它需要修改 VStack 中的一个元素(比如你的 HStack 或 Spacer),所以就像我说的那样,把那条线放在你将 HStack 的背景颜色设置为蓝色的那条线的下面。它试图在您的 HStack 上方放置一个空标题,这是您不想要的。
【讨论】:
【参考方案2】:你可以试试这样的:
struct ContentView: View
var body: some View
NavigationView
VStack
HStack
Text("dd")
.frame(width: 500, height: 300)
.background(Color.blue)
Spacer()
.padding(.top, 88) // <--- adjust to your needs
.navigationBarItems(leading: Text("Title"), trailing: Button(action:
//some action
)
Text("Button")
).edgesIgnoringSafeArea(.top) // <--- add this
【讨论】:
以上是关于在 swiftUI 中,如何仅删除 NavigationBarTitle 的安全区域?的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI - 如何基于@ObservedObject 为每个列表视图项创建编辑视图
SwiftUI:如何仅在设备处于横向模式时启用 ScrollView?