【问题标题】:SwiftUI NavigationView remove white spaceSwiftUI NavigationView 删除空格
【发布时间】:2020-10-30 07:19:34
【问题描述】:

我有一个HomeView

NavigationView {
    ZStack {
        VStack {
             NavigationLink(destination: ProfileView()) {
                 if session.userInSession?.activated != 1 {
                     completionText(message: "Complete Your Profile")
                 } else {
                     completionText(message: "Edit Your Profile")
                 }
             }
        }
    }
}

我的ProfileView 没有包裹在导航视图中,也没有栏标题:

VStack {
    ScrollView(showsIndicators: false) {
        ...
    }
}

但我的ProfileView 也可以从我的SettingView 访问

NavigationView {
    VStack(alignment: .leading) {
        List {
            NavigationLink(destination: ProfileView()) {
            }
        }
    }
}

当我从设置屏幕访问我的ProfileView 时,它显示正常。但是当我从HomeView 访问它时,它会在顶部创建空白:

当我通过设置时它很好:

我怎样才能去掉上面的这个空白?

【问题讨论】:

    标签: swift swiftui swiftui-navigationlink swiftui-navigationview


    【解决方案1】:

    看起来您的HomeView/s NavigationView 具有.navigationBarTitleDisplayMode(.large) 或自动,默认情况下为.large,但您的SettingView 具有.navigationBarTitleDisplayMode(.inline)(考虑< Setting 下方的分隔符),所以你会看到不同高度的标题栏。

    当然这是假设,因为没有没有详细的代码,但可能的解决方案是为ProfileView添加显式模式,例如:

    VStack {
       ScrollView(showsIndicators: false) {
       }
    }.navigationBarTitleDisplayMode(.inline)     // << here !!
    

    【讨论】:

      【解决方案2】:

      这个 空格 可能是 NavigationView 的空标题。

      您可以尝试隐藏导航栏标题:

      NavigationView {
          ZStack {
              ...
          }
          .navigationBarTitle("")
          .navigationBarHidden(true)
      }
      

      作为测试尝试设置.navigationBarTitle("Some title"),看看你是否仍然看到这个空白空间,或者它是否被一些标题文本替换。

      【讨论】: