适配iPhone X和iOS 11的随笔

前言:
9月20日,Xcode 9正式上线了,终于可以揭开iPhone X的神秘面纱了,好奇夹杂着兴奋的同时,依然带有可能被坑的不安。

适配iOS 11

1.Xcode 9有些编译报错

作者碰到编译错误的库有RealReachability。在Apple的这个网络监听库中,/Ping/PingFoundation.h中有使用编译时态的语法,然后提示错误。解决方法既可以替换最新的库,也可以将代码改成一下。


60116C5B-D895-46DD-8630-AC1809632EAA.png

可能读者你的项目还有别的错误,针对不同问题,可以去网上找相对应的错误的解决方法,也可以去及时替换第三方库,作者就不再此一一列举了。

2.屏幕尺寸不对,iPhone X为何屏幕尺寸还停留在375*667下?

问题描述: iPhone X的屏幕尺寸是375pt×812pt @3x,所以需要新给1125 * 2436。显示效果如下图

7CA8B6AD-5FF3-4B47-9B71-74705F4EEF6B.png

可以看出显示的区域并不是375*812,而从打印的日志NSLog(@"current bounds:%@",NSStringFromCGRect([UIScreen mainScreen].bounds));
也是当前的view frame:{{0, 0}, {375, 667}},所以iPhone X并没有获取正确的屏幕尺寸。
问题解决:其实,这个问题之前也遇到过。很多项目在配置LaunchImage时,使用的是Assets,如下图。
713FBA03-CBF2-4237-8718-243256BCC500.png

而iPhone X的屏幕尺寸是375pt×812pt @3x,所以需要在Assets里将LaunchImage进行修改。将原有的LaunchImage.Assets删了重新 创建带iPhone X的Landscape,并且图片尺寸为375×3 * 812×3即可。

3.iPhone X的状态栏变成了44点了

4.关于iOS 11的适配

(1)UITableViewStyleGrouped类型的UITableView顶部留白问题
原因:在于代码只实现了heightForHeaderInSection方法而没有实现viewForHeaderInSection方法。只实现高度没实现view在iOS11之前没有问题,而iOS11之后由于开启了估算行高机制引起的bug。
解决方式:
第一种方式:添加viewForHeaderInSection方法即可解决。
第二种方式:

    self.tableView.estimatedSectionHeaderHeight = 16;  //该值根据自己项目进行设置
    self.tableView.estimatedSectionFooterHeight = 0.1;

(2)iOS11下APP中tableView内容下移20pt或者64pt
原因:iOS11中的Controller的automaticallyAdjustsScrollViewInsets属性被废弃了,所以当tableView超过安全区域时,系统自动调整了SafeAreaInsets值,进而影响adjustedContentInset属性,而不是contentInset。所以adjustedContentInset值调整,导致tableView下移了20pt或者64pt。(自己在调试的时候可以打印,如下代码)

NSLog(@"safe area insets:%@",NSStringFromUIEdgeInsets(self.scrollView.safeAreaInsets));//注意打印该句话,需要在scrollView已经创建完成打印,如在viewWillDisappear:中打印,刚创建的时候是默认UIEdgeInsetsZero值的

解决方式:
第一种解决方式:重新设置scrollView的contentInset值,来抵消SafeAreaInset值
第二种解决方式:设置scrollView的contentInsetAdjustmentBehavior值,如下代码

 if (@available(iOS 11.0, *)) {
        self.tableView.contentInsetAdjustmentBehavior = UIApplicationBackgroundFetchIntervalNever;
    }

第三种解决方式:通过新增属性addtionalSafeAreaInset。
iOS 11之前,大家是通过将Controller的automaticallyAdjustsScrollViewInsets属性设置为NO,来禁止系统对tableView调整contentInsets的。如果还是想从Controller级别解决问题,那么可以通过设置Controller的additionalSafeAreaInsets属性,如果SafeAreaInset值为(20,0,0,0),那么设置additionalSafeAreaInsets属性值为(-20,0,0,0),则SafeAreaInsets不会对adjustedContentInset值产生影响,tableView内容不会显示异常。这里需要注意的是addtionalSafeAreaInset是Controller的属性,要知道SafeAreaInset的值是由哪个Controller引起的,可能是由自己的Controller调整的,可能是navigationController调整的。是由哪个Controller调整的,则设置哪个Controller的addtionalSafeAreaInset值来抵消掉SafeAreaInset值
注:参考iOS 11 安全区域适配总结

快速解决方式

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    if (@available(iOS 11.0, *)) {
        UIScrollView.appearance.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
        UITableView.appearance.estimatedRowHeight = 0;
        UITableView.appearance.estimatedSectionFooterHeight = 0;
        UITableView.appearance.estimatedSectionHeaderHeight = 0;
    } else {
        // Fallback on earlier versions
    }
    //....
}

(3)iOS11相册权限变更
iOS11之后:默认开启访问相册权限(读权限),无需用户授权,无需添加NSPhotoLibraryUsageDescription,适配iOS11之前的还是需要加的。添加图片到相册(写权限),需要用户授权,需要添加 NSPhotoLibraryAddUsageDescription

在谈谈Xcode 9的一些新的别的功能

Xcode 9的无线调试
前提要求:①Xcode 9 ②真机设备iOS 11 ③mac和真机同处一个wifi环境

第一步:还是要用线☺️先连接,打开Windows->Device and Simulators,选择你要的真机。

EDE2B05A-D366-419A-BD05-7299BBE43778.png

第二步:你的设备右侧会出现一个球状标识, 到此你就可以拔掉数据线, 开始无效调试咯

71E8B750-F21C-47D0-8342-2FF12925AAF2.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • 本文为作者原创,未经作者允许不得转载。该文同时发表在腾讯bugly公众号:http://mp.weixin.qq....
    sonialiu阅读 112,088评论 146 573
  • | 导语 本文主要是对iOS 11下企鹅 FM APP中tableView内容下移20pt或下移64pt的问题适配...
    762683ff5d3d阅读 1,230评论 4 2
  • 我的这个第二个同事,大家给他起的外号“拉哥”(之后我就简称他为“L”吧),开始我都不知道这个外号是什么意思,后来专...
    可可周阅读 291评论 0 1
  • 前几天参加一聊天场合,有大学、小学教师,也有行业外科研院所朋友,基本都为硕、博一类知识分子。共性身份,家长,各年龄...
    大图图阅读 541评论 3 5
  • 1.不动产登记申请书*1 2.不动产登记法人代表身份证明书*1 3.同意抵押证明*2 4.不动产价值认定书*2 5...
    锐毅阅读 260评论 0 0