iOS7下 interactivePopGestureRecognizer 奇怪问题
2015-10-20 15:39
274 查看
前几天在开发的时候碰到个奇怪的问题,将initWithCustomView出来的barButtonItem对象设置到navigationBar上之后,iOS7的设备下会出现interactivePopGestureRecognizer手势pop失效的问题。网上有解决方案是设置完navigationBar的buttonItem之后,重新将navigationController中的interactivePopGestureRecognizer设置为nil,这样虽然解决了手势的问题,但是在某些操作的情况下会出现新的问题。
假设navigationController在push一个viewController的时候,迅速地通过手势进行pop操作,有时会出现navigationBar的titleView和对应的内容视图不一致的情况,有时界面会出现假死的情况(这种情况下home退出,再返回app,有一定的概率能回到正常状态),就好像navigationController中viewControllers的栈关系和导航里的内容错乱了,控制台中也会输出如下错误
在 pushViewController 的时候适当设置标记禁用手势,0.5s 后重置,然后在 gestureRecognizerShouldBegin: 里修改标记。这样做的思路就是在push的时候禁用手势,等动画结束后再重新开启。
但是一开始自己在用这个方法的时候发现并不是所有情况都能解决,后来发现原来是因为当初图省事,在开发的时候自己写了个BaseViewController的基类,然后override了ViewWillAppear和ViewWillDisappear,因为产品那边经常要统计进入某个界面的次数。但是由于部分的viewController继承BaseViewController:UIViewController的时候,在BaseViewController的viewDidLoad中错误地设置了navigationController.interactivePopGestureRecognizer的delegate,所以造成了刚才提到的情况。这里推荐使用MethodSwizzle替代继承的方案,不然下次不知道什么时候’基类‘又变成‘鸡肋’了···
到此为止,这个奇怪的问题算是解决了。最后想说的是,如果可能的话,在iOS7下设置barButtonItem尽量不要用initWithCustomView方法,it makes me sick...
PS:附上一个UIView的category库,如果你是在代码里布局而不是通过IB的的话,应该用得到:D
转自:http://www.taofengping.com/2013/12/26/ios7_barbuttonitem_navigation_gesture/#.UtZ48WSSzGz
假设navigationController在push一个viewController的时候,迅速地通过手势进行pop操作,有时会出现navigationBar的titleView和对应的内容视图不一致的情况,有时界面会出现假死的情况(这种情况下home退出,再返回app,有一定的概率能回到正常状态),就好像navigationController中viewControllers的栈关系和导航里的内容错乱了,控制台中也会输出如下错误
nested push animation can result in corrupted navigation bar,我随机挑选了手机中为iOS7优化过的app,其中Pinterest 3.3.1和啪啪 3.1.2都有这个类似的问题。和群里的朋友们讨论了一下,找到一个解决方案:设置interactivePopGestureRecognizer的delegate后,实现如下方法
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)
在 pushViewController 的时候适当设置标记禁用手势,0.5s 后重置,然后在 gestureRecognizerShouldBegin: 里修改标记。这样做的思路就是在push的时候禁用手势,等动画结束后再重新开启。
但是一开始自己在用这个方法的时候发现并不是所有情况都能解决,后来发现原来是因为当初图省事,在开发的时候自己写了个BaseViewController的基类,然后override了ViewWillAppear和ViewWillDisappear,因为产品那边经常要统计进入某个界面的次数。但是由于部分的viewController继承BaseViewController:UIViewController的时候,在BaseViewController的viewDidLoad中错误地设置了navigationController.interactivePopGestureRecognizer的delegate,所以造成了刚才提到的情况。这里推荐使用MethodSwizzle替代继承的方案,不然下次不知道什么时候’基类‘又变成‘鸡肋’了···
到此为止,这个奇怪的问题算是解决了。最后想说的是,如果可能的话,在iOS7下设置barButtonItem尽量不要用initWithCustomView方法,it makes me sick...
PS:附上一个UIView的category库,如果你是在代码里布局而不是通过IB的的话,应该用得到:D
转自:http://www.taofengping.com/2013/12/26/ios7_barbuttonitem_navigation_gesture/#.UtZ48WSSzGz
相关文章推荐
- iOS- 如何集成支付宝
- iOS7 NavigationController 手势问题 interactivePopGestureRecognizer
- [转][iOS Crash文件分析]-如何使用symbolicatecrash工具
- IOS 不同场景/页面下数据传递方法
- iOS的管理机制
- 在ios下保存数据到plist
- ios 文件上传, post数据
- IOS读取项目中文件
- [转] ios打包IPA的各种问题和解决方法
- IOS-照相,相片选取
- ios 获取当前时间
- NSURLConnection的几种请求方式
- IOS 字体大全
- iOS使用系统API扫描二维码条形码&限制扫描区域
- iOS: SegmentControl 实现页面切换的四种方法
- iOS使用zbar以及AVFoundation实现二维码扫描
- IOS基本数据类型之枚举
- iOS--崩溃日志分析
- iOS之用NSTimer定时刷新按钮的文字,避免按钮闪烁的办法
- ios修改textField的placeholder的字体颜色、大小