SwiftUI - iOS 14.5 更新导航栏问题

3

我将我的应用程序更新到了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()
                }
            }
        }
    }
}

图片:导航问题展示

我添加了两张图片: 第一张:父视图 - 无导航栏弹出。 第二张:父视图 - 导航栏向上弹出(向下滚动)。 我希望总是只有汽车图片在顶部(边缘),当您向下滚动时,导航栏会出现。

[导航栏问题] 进入图片描述

2个回答

0
我添加了两张图片: 第一张:父视图 - 没有导航栏弹出。 第二张:父视图 - 导航栏弹出(向下滚动)。 我希望始终只在顶部(边缘)显示汽车图片,当您向下滚动时,导航栏会出现。

[Navigationbar issue][1] enter image description here


啊,我明白了...你应该把这个问题移回到原来的问题中(只需编辑它即可)。在iOS 14.5中,可能有一些东西可以保持导航栏的显示模式跨越推送的视图。可能无法更改这个设置。 - aheze
1
感谢您的帮助。看起来是iOS 14.5的问题。 - SoftGuru

0
问题在于 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!
    }
}

结果:

Navigation bar stays in pushed navigationbarIssue view

navigationBarTitle正在被弃用。func navigationBarTitleDisplayMode(_ displayMode)是替代方案。 - lorem ipsum
@loremipsum 谢谢你告诉我,我会更新我的答案。 - aheze
谢谢你的回答。也许我没有表达清楚,对此我很抱歉。实际上,我想要将子屏幕上的图片放在顶部,而不是导航栏上方。在iOS 14.4中,这不是问题,因为当您打开子视图并向下滚动时,导航栏会出现。在iOS 14.5中,似乎这种行为已经消失了。如果父视图中也可见导航栏,则导航栏直接弹出到子视图中。当在父视图中看不到导航栏时,它可以正常工作,因为图片在子视图中位于顶部。希望我的图片能清楚显示这种行为。 - SoftGuru
@SoftGuru 我认为“打开子视图并向下滚动,导航栏会出现”的行为仍然存在:[gif(iOS 14.5)](https://github.com/aheze/DeveloperAssets/blob/master/Screen%20Recording%202021-04-29%20at%208.44.08%20AM.gif?raw=true) - aheze
是的,你说得对。但是如果在父视图中向下滚动(导航栏出现),然后单击导航链接,导航栏也会在子视图的顶部(无需滚动)显示出来。我将尝试在顶部添加两张额外的图片。第一张:父视图-没有导航栏弹出。第二张:父视图-导航栏弹出(向下滚动)。我希望始终只有汽车图片在顶部,当您向下滚动时,导航栏出现。 - SoftGuru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接