当NavBar隐藏时,向后滑动手势在iOS 17中不起作用- Swift UI

83qze16e  于 2023-10-21  发布在  iOS
关注(0)|答案(1)|浏览(118)

我一直在Swift UI中使用以下扩展来启用向后滑动手势,即使导航栏被隐藏。但是,在更新到iOS 17(beta)后,似乎这段代码不再起作用。我不确定这是否是新iOS版本中的一个bug,或者是否有不同的方法来实现此功能。谁能帮我解决这个问题或建议一个替代解决方案?

extension UINavigationController: UIGestureRecognizerDelegate {
   open override func viewDidLoad() {
    super.viewDidLoad()
    interactivePopGestureRecognizer?.delegate = self
  }

  // Allows swipe back gesture after hiding standard navigation bar with .navigationBarHidden(true).
  public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    viewControllers.count > 1
  }

  // Allows interactivePopGestureRecognizer to work simultaneously with other gestures.
  public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    viewControllers.count > 1
  }

  // Blocks other gestures when interactivePopGestureRecognizer begins (my TabView scrolled together with screen swiping back)
  public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    viewControllers.count > 1
  }

}

复制步骤:
创建SwiftUI项目。使用提供的扩展来启用向后滑动手势。在视图上设置.navigationBarHidden(true)。试着向后滑动视图。预期行为:视图应该响应向后滑动手势,即使导航栏隐藏。
实际行为:向后滑动手势不起作用,视图保持不变。
其他信息:
我已经在iOS 16上测试了这段代码,它像预期的那样工作。我已经验证了这个问题特别发生在iOS 17测试版上。我的Xcode版本是[15 A5219 j]。我没有对我的代码做任何其他重大更改。如能协助解决这一问题或提出替代办法,将不胜感激。谢谢你,谢谢!
通过提供此信息,您应该会从Stack Overflow社区获得相关帮助,无论是问题的解决方案还是与iOS 17兼容所需的任何更改的指导。

ffdz8vbo

ffdz8vbo1#

也许你可以试试这个

import UIKit
    
extension UINavigationController {
    override open func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        navigationBar.isHidden = AppState.shared.navHideen
    }
}

class AppState {
    static let shared = AppState()
    var navHideen = false
}

TestView()
   .onAppear {
        AppState.shared.navHideen = true
   }
   .onDisappear {
       AppState.shared.navHideen = false
   }

相关问题