在 swiftUI 中,如何仅删除 NavigationBarTitle 的安全区域?

Posted

技术标签:

【中文标题】在 swiftUI 中,如何仅删除 NavigationBarTitle 的安全区域?【英文标题】:In swiftUI, How to remove ONLY safe area of NavigationBarTitle? 【发布时间】:2020-04-24 02:44:35 【问题描述】:

我的目标是将navigationBaritems(用于按钮)与nabigationBarTitle(用于标题)嵌入同一行。但是navigationBarTitlenavigationBarItems. 的下划线

所以我没有使用navigationBarTitle,而是修改了如下代码:navigationBarItems(leading: Text("Title"), trailing: Button(action: ) Text("Button1"))

现在标题和按钮对齐在同一行,但问题是NavigationBarTitle 的安全区域。

我尝试过的事情: 我尝试使用navigationBarHidden(true) 删除它,但它删除了所有navigationBarItems 并且esgesIgnoringSafeArea 也删除了navigationBarItemssafearea。并且也考虑过使用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 的安全区域?的主要内容,如果未能解决你的问题,请参考以下文章

导航栏上的后退按钮仅显示没有单词的指示器

Swift/SwiftUI - 删除键盘上方的空间

SwiftUI - 如何基于@ObservedObject 为每个列表视图项创建编辑视图

SwiftUI:如何仅在设备处于横向模式时启用 ScrollView?

如何让用户在 SwiftUI 文本字段中仅使用数字输入货币,同时保留 $ 和 .?

Swiftui NavigationView 计时器延迟