我是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: "")
    }
}

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


当前回答

同样的问题,我终于解决了。为了让导航完全消失,你需要在NavigationView和它里面的所有NavigationsLinks中添加这些修饰符:

.navigationBarHidden(true)
.navigationBarTitleDisplayMode(.inline)

如果你不这样做,NavigationLinks也不会工作。

其他回答

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

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

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

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

你不需要设置标题,你可以简单地使用.stack

NavigationView {
     VStack {
         Color.cyan
      }
     .navigationBarHidden(true)
}
.navigationViewStyle(.stack)  // Here

对我来说,我应用。navigationbartitle到NavigationView,而不是列表是罪魁祸首。这适用于我在Xcode 11.2.1:

struct ContentView: View {
    var body: some View {
        NavigationView {
            List {
                NavigationLink(destination: DetailView()) {
                    Text("I'm a cell")
                }
            }.navigationBarTitle("Title", displayMode: .inline)
        }
    }
}

这是迄今为止我发现的最简单、最稳定的方法。你可以通过隐藏整个工具栏来隐藏导航标题和后退按钮。您可以显示,也可以选择在任何视图中显示它。你可以通过使用.toolbar(.hidden)隐藏它,并通过使用.toolbar(.visible)修饰符使它可见。

剪力/ 16 +

struct ContentView: View {
    var body: some View {
        NavigationStack {
            List {
                ForEach(0..<10) { i in
                    NavigationLink {
                        Text("Detail for Row \(i)")
                    } label: {
                        Text("Row \(i)")
                    }
                }
            }
            
            .toolbar(.hidden)
        }
    }
}

如果你的目标在iOS 16以下,你可以用NavigationView替换NavigationStack。

我尝试在我的Vstack的花括号的末尾添加.navigationBarHidden(true),就像这样

NavigationView { Vstack(){"some Code"}.navigationBarHidden(true)}

导航栏消失了,但如果我在导航栏的花括号后面添加。navigationbarhidden (true),就像这样

    NavigationView { Vstack(){"some Code"}}.navigationBarHidden(true)

导航栏不会消失