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

时间:2020-04-24 02:44:35

标签: swift swiftui

enter image description here我的目标是将navigationBaritems(用于按钮)与nabigationBarTitle(用于标题)嵌入在同一行。但是navigationBarTitlenavigationBarItems.

的下划线

因此,我没有使用NavigationBarTitle,而是修改了如下代码:navigationBarItems(开头:Text(“ Title”),结尾:Button(action:{}){Text(“ Button1”)})

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

我尝试过的事情 我尝试使用navigationBarHidden(true)删除它,但是它删除了所有navigationBarItems,并且esgesIgnoringSafeArea也删除了safearea的{​​{1}}。并且还考虑过使用navigationBarItems,但效果不好。

如何在这里仅删除NavigationBarTitle的displaymode: .inline

我当前的代码:

safearea

2 个答案:

答案 0 :(得分:2)

有时候我认为SwiftUI可能不直观,但是这里有一些建议:

尝试将以下行放在.background(Color.blue)行之后:

.navigationBarTitle("", displayMode: .inline)

将标题更改为非空字符串以查看.inline在做什么。也尝试取出, displayMode: .inline。这个大标题就是试图填补您在VStack上看到的所有空白空间的原因。如果您想要自定义导航栏,也可以使用.navigationBarHidden(true)进行实验(尽管您可能不希望这样做,但是尝试仍然很有趣)。

编辑:我知道您说您尝试过其中一些方法。关键是您在上面列出的那行。它需要修改VStack中的一个元素(如您的HStack或Spacer),所以就像我说的那样,将该行放在将HStack的背景色设置为蓝色的那一行下面。它正在尝试在您的HStack上方放置一个空标题,这是您不想要的。

答案 1 :(得分:1)

您可以尝试这样的事情:

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

    }
}
}