【问题标题】:ios15 half-swiping back while hiding the navigation bar leaves a top empty space - SwiftUIios15在隐藏导航栏时向后半滑动会留下顶部空白空间 - SwiftUI
【发布时间】:2021-12-16 10:01:21
【问题描述】:

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

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

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

我附上了一个展示问题的视频,显示半滑动 SecondView 不会产生任何顶部空间,但半滑动 ThirdView 会。

代码如下:

import SwiftUI

// https://stackoverflow.com/questions/59921239/hide-navigation-bar-without-losing-swipe-back-gesture-in-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 中一切正常

【问题讨论】:

  • .navigationBarTitle 已弃用,请尝试将其替换为 .navigationTitle
  • @eXCore 感谢您提供的信息,我将替换它:) 不过,它并没有解决问题。

标签: swiftui swiftui-navigationlink swiftui-navigationview


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多