【问题标题】:SwiftUI - iOS 14.5 Update navigation bar issueSwiftUI - iOS 14.5 更新导航栏问题
【发布时间】:2021-04-29 10:55:35
【问题描述】:

我将我的应用更新到 iOS 14.5,突然出现导航问题。我在 iOS 14.4 或更低版本中没有遇到此问题。

我制作了一个新的小程序来显示这个问题。当我单击 navigationLink(不向下滚动)时,第二个视图中的导航栏不可见,图片将显示在顶部。当我向下滚动一点时,导航栏在第二个视图的顶部直接可见。如何在不直接在顶部显示导航栏的情况下移动到第二个视图?它应该只在我向下滚动时可见。

请问您能帮我解决这个问题吗?

提前致谢!

import SwiftUI

struct ContentView: View {
    
    var body: some View {
        GeometryReader{ geo in
        NavigationView {
            VStack{
                List {
                    NavigationLink(destination: navigationbarIssue()){
                        Text("Navigation image")
                    }
                    Image("car")
                        .resizable().frame(width: geo.size.width * 0.85, height: 600, alignment: .center)
                        .scaledToFill()
                    }
                
                Text("Hello, Do you like this mini car!")
                    .padding()
                }
            .navigationTitle("Car")
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

struct navigationbarIssue: View {
    var body: some View {
        GeometryReader { geo in
            ScrollView {
                VStack{
                    Image("car")
                       .resizable().frame(width: geo.size.width * 1.11, height: geo.size.height * 1.11)
                       .edgesIgnoringSafeArea([.top, .bottom])
                       .offset(x: -20, y: -166)
                       .aspectRatio(contentMode: .fit)
                    Text("Question: What's the topspeed of this mini car?")
                        .padding()
                }
            }
        }
    }
}

我添加了两张图片: 第一个:父视图 - 没有导航栏弹出。 第二个:父视图-导航栏弹出(向下滚动)。 我喜欢始终只在顶部(边缘)放置汽车图片,向下滚动时会出现导航栏。

[

【问题讨论】:

    标签: ios swift swiftui navigationbar navigationview


    【解决方案1】:

    问题是navigationbarIssue 认为它应该有一个大标题样式的导航栏,在滚动之前它是透明的。您想添加 .navigationBarTitleDisplayMode(.inline) 使其具有内联导航样式。

    struct navigationbarIssue: View {
        var body: some View {
            GeometryReader { geo in
                ScrollView {
                    VStack{
                        Image("car")
                           .resizable().frame(width: geo.size.width * 1.11, height: geo.size.height * 1.11)
                           .edgesIgnoringSafeArea([.top, .bottom])
                           .offset(x: -20, y: -166)
                           .aspectRatio(contentMode: .fit)
                        Text("Question: What's the topspeed of this mini car?")
                            .padding()
                    }
                }
            }
            .navigationTitle("The car") /// might want to add a title too
            .navigationBarTitleDisplayMode(.inline) /// here!
        }
    }
    

    结果:

    【讨论】:

    • @loremipsum 感谢您告诉我。将更新我的答案。
    • 感谢您的回答。可能我表达的不够清楚,抱歉。实际上我想要顶部子屏幕上的图片而不是导航栏。在 iOS 14.4 中这不是问题,因为当您打开子视图并向下滚动时,会出现导航栏。在 iOS 14.5 中,这种行为似乎消失了。如果导航栏在父视图中也可见,则导航栏直接在子视图中弹出。当导航栏在父视图中不可见时,它可以正常工作,因为图片位于子视图的顶部。希望我的图片显示了这种行为。
    • @SoftGuru 我认为“打开子视图并向下滚动,会出现导航栏”的行为仍然存在:gif (iOS 14.5)
    • 是的,你是对的。但是,如果您在父视图中向下滚动(显示导航栏)然后单击导航链接,导航栏也会(弹出)显示在子视图的顶部操作中(不滚动)。我会尝试在顶部添加两张额外的图片。第一个:父视图 - 没有导航栏弹出。第二个:父视图-导航栏弹出(向下滚动)。我喜欢始终只在顶部显示汽车图片,向下滚动时会出现导航栏。
    【解决方案2】:

    我添加了两张图片: 第一个:父视图 - 没有导航栏弹出。 第二个:父视图-导航栏弹出(向下滚动)。 我喜欢始终只在顶部(边缘)放置汽车图片,向下滚动时会出现导航栏。

    [

    【讨论】:

    • 啊,我明白了......你应该把它移回你原来的问题(只是edit它)。在 iOS 14.5 中,可能有一些东西可以在推送视图中保持导航栏的显示模式。可能无法更改。
    • 感谢您的帮助。这看起来像是 iOS 14.5 中的一个问题。
    猜你喜欢
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2020-03-14
    • 2021-07-26
    • 1970-01-01
    相关资源
    最近更新 更多