ios15 half-swiping 隐藏导航栏时返回,顶部留空 space - SwiftUI

ios15 half-swiping back while hiding the navigation bar leaves a top empty space - SwiftUI

我正在开发一个项目,其中有一个自定义导航栏,这意味着我需要自己管理后退按钮和向后滑动手势。以前没遇到什么问题,但是现在当我尝试向后滑动并停在手势中间时(半滑动),屏幕显示顶部白色space,好像导航栏是显示时没有标题(如果按下自定义后退按钮或完成手势即完全滑动,则不会出现此问题)。

在 出现白色 space 后尝试向后滑动 时也显示错误:changing items while animating can result in a corrupted navigation bar

奇怪的是,问题只发生在 NavigationView 的第三个屏幕上。

我附上了一个显示问题的视频,显示 half-swiping SecondView 没有产生任何顶部 space,但是 half-swiping ThirdView 确实如此。

代码如下:

import SwiftUI

// 
extension UINavigationController {
    override open func viewDidLoad() {
        super.viewDidLoad()
        interactivePopGestureRecognizer?.delegate = nil
    }
}

struct ContentView: View {

    init() {
        print("ContentView")
    }
    
    var body: some View {
        NavigationView {
            NavigationLink(destination: SecondView()) {
                Text("Go to second view")
            }
            .navigationBarTitle("")
            .navigationBarHidden(true)
            .navigationBarBackButtonHidden(true)
        }
    }
}

struct SecondView: View {
    
    init() {
        print("SecondView")
    }
    
    var body: some View {
        VStack {
            Text("Second view")

            VStack {
                NavigationLink(destination: ThirdView()) {
                    Text("Go to third view")
                }
            }
            .padding(.horizontal, 20)
            .padding(.top, 20)
            Spacer()
        }
        .navigationBarTitle("")
        .navigationBarHidden(true)
        .navigationBarBackButtonHidden(true)
    }
}

struct ThirdView: View {
    
    init() {
        print("ThirdView")
    }
    
    var body: some View {
        VStack {
            Text("Third view")
            
            Spacer()
        }
        .navigationBarTitle("")
        .navigationBarHidden(true)
        .navigationBarBackButtonHidden(true)
    }
}

编辑:这只能在使用 iOS 15 时重现,在 iOS 14.5

中一切正常

这是一些奇怪的技巧,但我能够通过在 NavigationView 上使用 .navigationViewStyle(.stack) 来“修复”它。

顺便说一句,如果您有兴趣,白色 space 是导航栏和大导航标题。调试这类东西的一个有用的东西是“调试视图层次结构”按钮。

这绝对是一个 hack,但您仍然可以尝试向 Apple 提交错误报告。