【问题标题】:SwiftUI NavigationView collapse on scrollSwiftUI NavigationView 在滚动时折叠
【发布时间】:2019-07-30 13:56:57
【问题描述】:

当我滚动时,如何让 NavigationBar 从 large 折叠到 inline?现在ScrollView 正在将其内容滚动到NavigationBar 的标题下方,但在返回按钮的前面。

    var body: some View {
        NavigationView {
            ScrollView {
                VStack {
                    ForEach(0...5) { _ in
                        ExerciseView()
                    }
                }
                .padding()
            }
        }
        .navigationBarTitle("Testing", displayMode: .automatic)

【问题讨论】:

    标签: ios swift swiftui


    【解决方案1】:

    首先要注意的是navigationBarTitle 应该是ScrollView 的修饰符,而不是NavigationView

    var body: some View {
        NavigationView {
            ScrollView {
                VStack {
                    ForEach(0...5) { _ in
                        ExerciseView()
                    }
                }
                .padding()
            }
            .navigationBarTitle("Testing", displayMode: .automatic)
        }
    }
    

    来自navigationBarTitle的文档:

    此修饰符仅在此视图位于 NavigationView 内部且可见时才生效。

    另一件要记住的事情,根据displayMode 的文档:

    case automatic
    

    继承上一个导航项的显示模式。

    如果您使用.automatic,您是在告诉NavigationView 使用与上一个导航项相同的显示模式,这意味着如果您从具有displayMode.inline 的视图导航,那么您的新视图也将继承该显示模式。

    然而,在将 navigationBarTitle 修饰符移动到 ScrollView 之后,您的问题仍然存在 - 滚动视图在导航栏标题和后退按钮文本下方滚动,就好像导航栏的背景丢失一样。

    this question 的答案解决了在状态栏文本下方滚动List 的类似问题,因此我使用了他们的建议,即在ScrollView 中添加填充。这样的工作方式是,滚动视图现在可以在导航栏下方正确滚动,但是当您滚动时,导航栏仍然不会从 .large 折叠到 .inline

    这对我来说真的只是一个错误。开始时不需要在滚动视图上设置填充。视图不知道它是否会嵌套在 NavigationView 中,那么为什么它必须指定填充才能使导航栏正常工作?

    同时,我建议将displayMode 设置为.inline。至少这样,一切都会像您预期的那样运行。

    【讨论】:

    • 我有一个带有搜索栏的视图,该视图显示在滚动视图拉动上。导航标题显示在滚动内(我触发它的偏移量)。我(在某种程度上)解决了这个问题,根据这个答案,在搜索显示时从.automatic 切换到.inline
    【解决方案2】:

    将 ScrollView .padding() 交换为 .padding(.leading, 20) 和 .padding(.trailing, 20) 为我解决了类似的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 2017-01-14
      相关资源
      最近更新 更多