坑一:自定义导航栏返回键 iOS7及之后版本 手势边缘右滑返回失效

解决方案:

-(void)viewDidLoad{

    [super viewDidLoad];

    //self 为 UINavigationController 子类
self.interactivePopGestureRecognizer.delegate=(id)self; }

网上千篇一律都是该答案,确实加了这句话可以手势返回了,然而却又埋下了新的坑。

坑二:在UINavigationController的rootViewController触发手势边缘右滑,然后触发push方法界面卡死,必须重新边缘右滑后方可恢复,如下图所示

解决方案:

坑二的问题主要是由坑一埋下的,为何出现坑二的情况并不清楚,有知道的麻烦告知谢谢。

-(void)viewDidLoad{

    [super viewDidLoad];

    self.interactivePopGestureRecognizer.delegate=(id)self;

    //实现UINavigationControllerDelegate协议
self.delegate = self;
} //push完成 且界面显示完成时 这个是Delegate的方法
 - (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (navigationController.viewControllers.count == ) {       //如果是 rootViewController 禁止滑动手势
      self.interactivePopGestureRecognizer.enabled = NO;
    } else{
    
      //如果不是 就启用 滑动手势
      self.interactivePopGestureRecognizer.enabled = YES;
    }
}

坑三:在视图Push过程中,且Push尚未完成时触发了Pop,可能会导致界面卡死,不响应任何手势,点击事件

解决方案:重写 push方法

- (void) pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{ self.interactivePopGestureRecognizer.enabled = NO; [super pushViewController:viewController animated:animated];
}

push时禁用了,push完就要开启,否则手势就无效了。开启方法同坑二,实现UINavigationControllerDelegate 方法

 - (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{

}

swift demo下载

oc demo下载

UINavigationController 的一些坑的更多相关文章

  1. UIScrollView的坑--UINavigationController Push后位置变化

    今天在使用UIScrollView的时候遇到了一个问题,记录一下.如果这个记录有幸被您搜索到,或许对您有些帮助. 今天有这样一个需求: 在一个由导航条控制的页面中.需要显示一些信息,目前已经有10多行 ...

  2. 隐藏NavigationBar 带来的坑

    一.场景介绍 现在大多数APP 都有一个需求,就是隐藏某一个页面的NavigationBar.很多开发者直接   [self.navigationController setNavigationBar ...

  3. iOS7之后经过滑动返回导航栏隐藏和显示带来的坑(转载)

    iOS7之后经过滑动返回导航栏隐藏和显示带来的坑 Apple 自从iOS7之后增加了屏幕边缘右滑返回交互的支持,再配合UINavigationController的交换动画,pop上一级的操作变的非常 ...

  4. XCode10 swift4.2 适配遇到的坑

    以下是2018年10月23日更新 经过大约一个月的时间的适配,项目正式使用XCode10(以下简称为10 or XC10)大部分库都升级为Swift4.2(以下简称为 4.2 or S4.2),下面是 ...

  5. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  6. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  7. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  8. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  9. 踩石行动:ViewPager无限轮播的坑

    2016-6-19 前言 View轮播效果在app中很常见,一想到左右滑动的效果就很容易想到使用ViewPager来实现.对于像我们常说的banner这样的效果,具备无限滑动的功能是可以用ViewPa ...

随机推荐

  1. java.lang.ClassNotFoundException: Didn't find class "org.reactivestreams.Publisher" on path

    缺少jar包  reactive-streams-1.0.0.jar  和  reactive-streams-1.0.0-sources.jar 常用于  Rxjava 开发过程中 <?xml ...

  2. html5--5-6 绘制圆/弧

    html5--5-6 绘制圆/弧 学习要点 掌握arc() 方法创建圆弧/曲线(用于创建圆或部分圆) 矩形的绘制方法 rect(x,y,w,h)创建一个矩形 strokeRect(x,y,w,hx,y ...

  3. hdu 1715 大菲波数(大数)

    题意:整数大数加法 思路:大数模板 #include<iostream> #include<stdio.h> #include<stdlib.h> #include ...

  4. Failed to import pydot

    在使用keras进行模型绘制的时候,出现了一个错误 Failed to import pydot. You must install pydot and graphviz for `pydotprin ...

  5. C语言文件读写总结

    主要有四种: 1.文件的字符输入输出函数 fgetc fputc2.文件的字符串输入输出函数 fgets fputs3.文件的格式化输入输出函数 fscanf fprintf4.文件的数据块输入输出函 ...

  6. CodeForces - 597C:Subsequences (主席树+DP)

    For the given sequence with n different elements find the number of increasing subsequences with k + ...

  7. zookeeper入门到精通

  8. Autoware docker 环境安装

    环境: ubuntu 16.04    GPU:GeForce 1070   nvidia 驱动型号:nvidia_driver_390.67 安装参考网址: https://github.com/C ...

  9. Redis配置主从架构,实现读写分离

    Redis的主从架构,能帮助我们实现读多,写少的情况,下面配置Redis架构,很简单. 准备环境 vmware + rhel-server-7.0(101,102,103)+redis-3.2.0 1 ...

  10. ubuntu_ root change to user

    (1)从user用户切换到root用户 不管是用图形模式登录Ubuntu,还是命令行模式登录,我们会发现缺省的用户是user 但是当我们需要执行一些具有root权限的操作(如修还系统文件)时,经常需要 ...