我是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的目的是在视图的顶部添加导航栏。在iOS中,有两种导航条:大导航条和标准导航条。
如果你不想要导航栏:
FileBrowserView(jsonFromCall: URLRetrieve(URLtoFetch: applicationDelegate.apiURL))
如果你想要一个大的导航栏(通常用于顶级视图):
NavigationView {
FileBrowserView(jsonFromCall: URLRetrieve(URLtoFetch: applicationDelegate.apiURL))
.navigationBarTitle(Text("Title"))
}
如果你想要一个标准(内联)导航栏(通常用于子级别视图):
NavigationView {
FileBrowserView(jsonFromCall: URLRetrieve(URLtoFetch: applicationDelegate.apiURL))
.navigationBarTitle(Text("Title"), displayMode: .inline)
}
希望这个答案对你有所帮助。
更多信息:苹果文档
我也尝试了本页上提到的所有解决方案,只发现@graycampbell解决方案工作良好,具有良好的动画效果。所以我试着创建一个值,我可以在整个应用程序中使用,我可以通过hackingwithswift.com的例子访问任何地方
我创建了一个ObservableObject类
class NavBarPreferences: ObservableObject {
@Published var navBarIsHidden = true
}
把它传递给SceneDelegate中的初始视图,就像这样
var navBarPreferences = NavBarPreferences()
window.rootViewController = UIHostingController(rootView: ContentView().environmentObject(navBarPreferences))
然后在ContentView中,我们可以像这样跟踪这个Observable对象,并创建一个指向SomeView的链接:
struct ContentView: View {
//This variable listens to the ObservableObject class
@EnvironmentObject var navBarPrefs: NavBarPreferences
var body: some View {
NavigationView {
NavigationLink (
destination: SomeView()) {
VStack{
Text("Hello first screen")
.multilineTextAlignment(.center)
.accentColor(.black)
}
}
.navigationBarTitle(Text(""),displayMode: .inline)
.navigationBarHidden(navBarPrefs.navBarIsHidden)
.onAppear{
self.navBarPrefs.navBarIsHidden = true
}
}
}
}
然后当访问第二个视图(SomeView)时,我们像这样再次隐藏它:
struct SomeView: View {
@EnvironmentObject var navBarPrefs: NavBarPreferences
var body: some View {
Text("Hello second screen")
.onAppear {
self.navBarPrefs.navBarIsHidden = false
}
}
}
为了保持预览工作,添加NavBarPreferences到预览,如下所示:
struct SomeView_Previews: PreviewProvider {
static var previews: some View {
SomeView().environmentObject(NavBarPreferences())
}
}
我试着设置
.navigationBarTitle("", displayMode: .inline) .navigationBarHidden(true)
但这并不奏效。问题是我把它设置成
NavigationView{...}.navigationBarTitle("", displayMode: .inline)
.navigationBarHidden(true)
但是为了摆脱NagigationBar,它应该被设置为内部视图
NavigationView{
InnerView{}.navigationBarTitle("", displayMode: .inline)
.navigationBarHidden(true)
}
希望这能有所帮助
要查看具体操作,您可以查看这个开源应用程序(WIP) https://github.com/deepaksingh4/KidsBookApp