隐藏导航栏时如何启用滑动手势?
Posted
技术标签:
【中文标题】隐藏导航栏时如何启用滑动手势?【英文标题】:How to enable swipe gesture when navigation bar is hidden? 【发布时间】:2018-02-23 18:48:44 【问题描述】:我已经尝试解决这个问题很长一段时间了,但无法弄清楚。我有当前的设置:
在每个视图控制器中,我像这样隐藏导航栏:
self.navigationController?.setNavigationBarHidden(true, animated: true)
问题是我松开了隐藏导航栏的视图控制器上的滑动手势。我需要启用动画并且不能使用:
self.navigationController?.navigationBar.isHidden = true
self.navigationController?.isNavigationBarHidden = true
任何帮助都会很棒,因为我相信很多人都遇到过这个问题。谢谢!
【问题讨论】:
使用此代码self.navigationController?.interactivePopGestureRecognizer?.delegate = self
我尝试使用它,但是当我使用应用程序切换屏幕时,它停止工作。该应用程序似乎冻结了,但实际上 VC 上的一个存在但不在屏幕上。然后我就可以把它滑下来了。好奇怪
【参考方案1】:
答案是:只需将 NavigationController 子类化并执行以下操作。
import UIKit
class YourUINavigationController: UINavigationController
override func viewDidLoad()
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = self
extension YourUINavigationController: UIGestureRecognizerDelegate
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool
return viewControllers.count > 1
【讨论】:
我认为您输入了错误的扩展名。 YourUINavigationController 而不是 VaultUINavigationController @MostfaEssam 这是正确的,我现在刚刚编辑它。【参考方案2】:您可以通过执行以下操作来处理滑动手势,这将帮助您避免冻结应用程序。
- (void)navigationController:(UINavigationController *)navigationController
didShowViewController:(UIViewController *)viewController
animated:(BOOL)animate
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)])
if (self.navigationController.viewControllers.count > 1)
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
else
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
【讨论】:
以上是关于隐藏导航栏时如何启用滑动手势?的主要内容,如果未能解决你的问题,请参考以下文章