问题描述:
在UINavigationController的rootViewController页面设置了leftBarbuttonitem & rightBarbuttonItem 之后执行若干操作后,经测试发现执行侧滑返回操作,rootViewController侧滑没反应,继续多侧滑几下,然后点击按钮执行push操作,多试几次发现会卡屏,页面卡死,进查看页面布局,页面已经push,但是当前页面没有刷新,初步判断是侧滑pop操作于push方法的冲突导致
修正方法
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
let vc = viewController as! DNBaseViewController
self.interactivePopGestureRecognizer?.isEnabled = false
super.pushViewController(viewController, animated: animated)
}
override func popViewController(animated: Bool) -> UIViewController? {
if self.viewControllers.count == 1 {
self.interactivePopGestureRecognizer?.isEnabled = false
}
return super.popViewController(animated: animated)
}
override func popToRootViewController(animated: Bool) -> [UIViewController]? {
self.interactivePopGestureRecognizer?.isEnabled = false
return super.popToRootViewController(animated: animated)
}
override func popToViewController(_ viewController: UIViewController, animated: Bool) -> [UIViewController]? {
if self.viewControllers.count == 1 {
self.interactivePopGestureRecognizer?.isEnabled = false
}
return super.popToViewController(viewController, animated: animated)
}
extension DNBaseNavigationViewController : UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
self.interactivePopGestureRecognizer?.isEnabled = true
if self.viewControllers.count < 2 || self.visibleViewController == self.viewControllers.first {
self.interactivePopGestureRecognizer?.isEnabled = false
}
}
}
extension DNBaseNavigationViewController : UIGestureRecognizerDelegate {
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if self.viewControllers.count < 2 || self.visibleViewController == self.viewControllers.first {
return false
}
return true
}
}
再次同样方法测试 没发现问题
网友评论