我是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)
}
希望这个答案对你有所帮助。
更多信息:苹果文档
我有一个类似的问题,当工作在一个应用程序,TabView应该显示一旦用户登录。
正如@graycampbell在他的评论中建议的那样,TabView不应该嵌入到NavigationView中,否则“空白”将会出现,即使使用.navigationBarHidden(true)
我使用ZStack来隐藏NavigationView。注意,对于这个简单的示例,我使用@State和@Binding来管理UI可见性,但是您可能希望使用更复杂的东西,例如环境对象。
struct ContentView: View {
@State var isHidden = false
var body: some View {
ZStack {
if isHidden {
DetailView(isHidden: self.$isHidden)
} else {
NavigationView {
Button("Log in"){
self.isHidden.toggle()
}
.navigationBarTitle("Login Page")
}
}
}
}
}
当我们按下Log In按钮时,初始页面消失,DetailView被加载。当我们切换注销按钮时,登录页面重新出现
struct DetailView: View {
@Binding var isHidden: Bool
var body: some View {
TabView{
NavigationView {
Button("Log out"){
self.isHidden.toggle()
}
.navigationBarTitle("Home")
}
.tabItem {
Image(systemName: "star")
Text("One")
}
}
}
}
我试着设置
.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