【问题标题】:SwiftUI: Navigation bar of destination view has no background and is not animated on scrollSwiftUI:目标视图的导航栏没有背景,滚动时没有动画
【发布时间】:2019-11-30 21:41:03
【问题描述】:

我正在尝试使用滚动视图制作通向目标视图的导航视图,其中目标视图的导航标题将向内联显示模式设置动画,或者至少在导航栏本身后面滚动。

基本上我正在尝试复制标准音乐应用程序的行为,特别是当您从图书馆转到歌曲时。

你有源视图(库),它有自己的标题,在滚动时动画进入内联显示模式。当您点击歌曲时,您还会获得带有新标题(歌曲)的列表,该列表也会在滚动时以动画方式进入内联显示模式。

所以我有带 NavigationBarTitle 的主 NavigationView。我使用自己的 NavigationBarTitle 和一些长长的内容列表移至destinationView。滚动时,主 Navigation 视图的 NavigationBarTitle 变为内联显示模式,但目标视图的 NavigationBar 表现得很奇怪:它基本上是一个没有背景和动画的覆盖。

如果您将目标视图的 NavigationBarTitle 全部删除,只会让事情变得更糟。似乎它添加了另一个透明的 NavigationBar,其中没有任何内容。

还尝试为导航栏添加背景,查看文档,但没有找到解决方案。

不确定是我做错了什么,还是只是 SwiftUI 或 Xcode 的 beta 错误。

import UIKit

struct ContentView: View {
    var body: some View {
        NavigationView{
            List(0..<20) { item in
                NavigationLink(destination: DetailedView()) {
                    Text("Next view")
                }
            }
            .navigationBarTitle("Source View")
        }
    }
}

struct DetailedView: View {
    var body: some View {
            List(0...25) { number in
                Text("This is \(number)'th row")
            }
            .navigationBarTitle(Text("Destination View")) 
// comment out line above to see empty frame of navigation bar

    }
}

【问题讨论】:

  • Xcode 和 Catalina 的 Beta 6:问题仍然存在。没有解决办法。

标签: swiftui xcode11 swift5.1


【解决方案1】:

这不是您问题的完整答案,而是一种临时解决方法:根据您的偏好,在子视图的列表中添加顶部或垂直填充。这就是我一直在做的事情,直到有更好的解决方案。

这至少会使导航标题下的内容滚动,并在标题后面呈现适当的背景。它没有漂亮的动画来使标题变小。

struct DetailedView: View {
    var body: some View {
            List(0...25) { number in
                Text("This is \(number)'th row")
            }
            .padding(.top)
            .navigationBarTitle(Text("Destination View"))
    }
}

【讨论】:

  • 谢谢。很高兴听到至少有一些 hack + NavigationBar 的这种奇怪行为存在于其他人中。
  • 看起来 beta 5 的行为与 beta 4 相同。
【解决方案2】:

这已在 iOS 13.1 公开版本中得到修复(在 Xcode 11 的 App Store 版本中)。

【讨论】:

  • 确实如此。
  • 似乎添加了一个背景中断 ``` NavigationView { Vstack { List(0..
【解决方案3】:

我目前处于 beta 5,我认为这是 SwiftUI 的一个持续错误。

我在做 SwiftUI 地标教程时注意到了同样的问题,您可以轻松地重现该问题:https://imgur.com/a/aYgUUH0

目前,为了避免在透明导航栏下看到所有内容滚动,我已将所有导航栏转换为显示为inline,因为automaticlarge 遇到了这个问题。

List {
    // ...
}
.navigationBarTitle(Text("MyTitle"), displayMode: .inline)

【讨论】:

    猜你喜欢
    • 2020-09-09
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    相关资源
    最近更新 更多