iOS10 的适配问题,你遇到了吗?导航栏标题和返回按钮神奇的消失了

苹果系统升级后好多应用都发了新版本来适配,今天就来分享一下我的适配历程。

首先是出现的问题:

  1.push一个控制器,返回按钮和标题神奇的消失了,打开三维视图(比较坑的是有的版本老到打不开三维视图 ),发现返回按钮和标题并没有消失,而是被一层视图挡到了。

  2.有文本输入的地方,在iOS10中文本框也消失了,导致无法输入内容。

  3.权限问题。

其次是解决思路:

  1.顶层被莫名其妙的加了一层视图,感觉是自定义的导航栏的背景视图的层次出问题了,所以查看了自定义的导航栏,但是并没有,后来问了问,有一个应急的解决办法,就是给导航栏设置背景色,颜色取背景图片的颜色,在每一个用到该导航栏的试图控制器的viewWillAppear方法中重新设置一下导航栏,在viewWillDisappear里也重新设置一下。

  但是上面的方法仅适用于导航栏颜色为纯色,,所以为了更灵活,还有另一种方法,就是在viewWillAppear和viewWillDisappear方法里先将视图控制器的导航栏隐藏然后再显示

  

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:NO];
    [self.navigationController setNavigationBarHidden:NO animated:NO];
}

-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:NO];
    [self.navigationController setNavigationBarHidden:NO animated:NO];
}

  

  第一次看到上面的代码时,我也跟你一样感到诧异,可是神奇的是它确实奏效了。

  为什么呢?简书的一位作者写过类似的博客,里面提到的原因是“iOS10在加载导航栏是总会加载系统的”。如果他说得对的话,也就是说push时系统会将自带的导航栏置顶,而隐藏后再显示只会显示自定义的导航栏。

  可是问题又来了,如果每一个视图控制器都加了上面的代码也是有问题的,问题是如果某视图控制器不需要继续push,那么该视图控制器会不能很好地适配iOS10,有时会返回到修改前的状态。解决方法是在进入该视图时判断是否需要跳转,如果需要继续跳转,则加上上面的代码,否则屏蔽掉。

  2.此处现在已知的方法是重新建立xib文件。

  3.iOS10 中某些权限是必须要加的

(参考:http://blog.csdn.net/wang631106979/article/details/52578001),

例如程序要拍照:Privacy - Camera Usage Description,

    麦克风:Privacy - Microphone Usage Description,

    定   位:Privacy - Location When In Use Usage Description,

    日   历:Privacy - Calendars Usage Description

******

后面的内容与标题无关 推广下个人开发的APP 觉得还不错的 自己自己偷偷用就行了

密码口袋

原文地址:https://www.cnblogs.com/PaulpauL/p/6017817.html