SwiftUI:目标视图的导航栏没有背景,并且没有滚动动画

时间:2019-07-22 21:35:20

标签: swiftui xcode11 swift5.1

我正在尝试使导航视图以滚动视图导航到目标视图,在该视图中,目标视图的导航标题将朝着嵌入式显示模式设置动画,或者至少在导航栏本身后面滚动。

基本上,我正在尝试复制标准音乐应用程序的行为,尤其是当您从“库”转到“歌曲”时。

您将拥有带有其自己的标题的源视图(库),该视图在滚动时变为内联显示模式。当您点击“歌曲”时,您还将获得带有新标题(歌曲)的列表,该列表也会在滚动显示时进入动画显示模式。

所以我有带有NavigationBarTitle的主NavigationView。我将使用带有其自己的NavigationBarTitle和一些较长内容列表的destinationView。在滚动时,主导航视图的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

    }
}

3 个答案:

答案 0 :(得分:1)

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

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

现在,为了避免看到所有内容在透明的navBar下滚动,我将所有导航栏都转换为显示为inline,因为automaticlarge遇到了问题

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

此问题已在iOS 13.1公开发行版(与Xcode 11的App Store发行版一起)中修复。