在iOS 7中,苹果增加了一个新的默认导航行为。你可以从屏幕的左边缘滑动回到导航堆栈。但在我的应用程序中,这种行为与我的自定义左侧菜单冲突。那么,是否有可能在UINavigationController中禁用这个新手势?
当前回答
迅速:
navigationController!.interactivePopGestureRecognizer!.enabled = false
其他回答
self.navigationController.pushViewController(VC, animated: Bool)
call
self.navigationController.setViewContollers([VC], animated: Bool)
setViewControllers替换堆栈上的所有VCs,而不是在顶部添加一个新的控制器。这意味着新的集合VC是根VC,用户不能返回。
当你只想在一个VC上禁用滑动,而在另一个VC上保持滑动时,这是最有效的。
如果你想让用户能够返回,而不是通过滑动,不要使用这个方法,因为它会禁用所有返回(因为没有VC可以返回)
所有这些解决方案都以一种他们不推荐的方式操纵苹果的手势识别器。我的一个朋友刚刚告诉我,有一个更好的解决方案:
[navigationController.interactivePopGestureRecognizer requireGestureRecognizerToFail: myPanGestureRecognizer];
其中myPanGestureRecognizer是你用来显示菜单的手势识别器。这样,当你按下一个新的导航控制器时,苹果的手势识别器就不会被重新打开,也不需要依赖黑客延迟,如果你的手机处于睡眠状态或负载过重,可能会过早触发。
把这个留在这里,因为我知道下次需要的时候我不会记得了,然后我就有了这个问题的解决方案。
这是Swift 3的方式
对我有用
self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false
迅速:
navigationController!.interactivePopGestureRecognizer!.enabled = false
我找到了一个解决方案:
objective - c:
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
斯威夫特3 +: self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false
推荐文章
- 如何删除默认的导航栏空间在SwiftUI导航视图
- Ios模拟器:如何关闭应用程序
- 如何在iOS中使用Swift编程segue
- Swift -整数转换为小时/分钟/秒
- Swift:声明一个空字典
- 为什么ARC仍然需要@autoreleasepool ?
- 在成功提交我的应用程序后,“太多符号文件”
- 首先添加一个UIView,甚至是导航栏
- 我如何改变UIButton标题颜色?
- 在Swift中如何调用GCD主线程上的参数方法?
- NSLayoutConstraints是可动画的吗?
- iOS -构建失败,CocoaPods无法找到头文件
- Xcode 4挂在“附加到(应用程序名称)”
- CFNetwork SSLHandshake iOS 9失败
- 请求失败:不可接受的内容类型:文本/html使用AFNetworking 2.0