我是SwiftUI的新手(像大多数人一样),试图弄清楚如何删除我嵌入在NavigationView中的List上面的一些空白。

在此图像中,您可以看到列表上方有一些空白。

我想要完成的是:

我试过用:

.navigationBarHidden(true)

但这并没有带来任何明显的变化。

我现在像这样设置我的navigationview:

NavigationView {
    FileBrowserView(jsonFromCall: URLRetrieve(URLtoFetch: applicationDelegate.apiURL))
        .navigationBarHidden(true)
}

其中FileBrowserView是一个带有List和FileCells的视图,定义如下:

List {
   Section(header: Text("Root")) {
       FileCell(name: "Test", fileType: "JPG",fileDesc: "Test number 1")
       FileCell(name: "Test 2", fileType: "txt",fileDesc: "Test number 2")
       FileCell(name: "test3", fileType: "fasta", fileDesc: "")
    }
}

我想指出的是,这里的最终目标是,您将能够单击这些单元格来更深入地导航到文件树中,因此在更深入的导航中应该在栏上显示一个后退按钮,但在我的初始视图中,我不希望顶部出现这样的任何东西。


当前回答

我有同样的问题,并发现下面的代码工作得最好。

   .navigationTitle("")
   .navigationBarBackButtonHidden(true)

其他回答

我必须从屏幕1导航到屏幕2。如果我像上面那样使用导航栏,导航栏将被隐藏,但它的空间仍然存在(高度的空间)在屏幕1中。

最后,我有自己的解决方案,在NavigationView内的任何视图中使用这段代码,不关心navigationBarTitle。就像这样:

Screen1:

NavigationView {
    SomeView {
        NavigationLink {
        // go to screen2
        }
    }.navigationBarHidden(true)
}

Screen2:

NavigationView {
// some Views
}.navigationBarHidden(true)

我为此挣扎了一段时间,但最终对我有效的是……

ZStack {
    ...
}
.edgesIgnoringSafeArea(.all) //or .edgesIgnoringSafeArea(.top)
.navigationBarBackButtonHidden(true)
.navigationBarHidden(true)

如果你将视图的标题设置为内联的,你想要删除空间,这并不需要在带有NavigationView的视图上完成,但也需要在导航的视图上完成。

.navigationBarTitle("", displayMode: .inline)

然后简单地改变导航栏的外观

init() {
    UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
    UINavigationBar.appearance().shadowImage = UIImage()
}

在持有初始NavigationView的视图上。

如果您想在屏幕之间更改外观,请在适当的视图中更改外观

我对这个问题的解决方案与@Genki和@Frankenstein的建议相同。

我对内部列表(不是NavigationView)应用了两个修饰符来消除空格:

.navigationBarTitle("", displayMode: .automatic)
.navigationBarHidden(true) 

在外层的NavigationView上,然后应用. navigationbartitle ("TITLE")来设置标题。

我知道我有点晚了,但我刚刚用上面的答案解决了这个问题: 如何摆脱空间嵌套的NavigationView与SwiftUI

如果该页面的内容发生变化,我将在下面解释答案。

只在任何需要导航的视图的最顶层使用NavigationView包装器,无论嵌套的子视图往下走多远。它们都已经有NavigationView属性,你可以在子视图中的任何时候调用NavigationLink。我在子视图周围有很多额外的NavigationView包装,删除它们可以删除额外的空白,同时保留所有导航链接的功能。