iOS11问题汇总

iOS11最终还是来了, 这次改版屏幕尺寸, 控件特性都有一些比较大的改变. 网上看的问题零零散散, 👇收集了一下开发中出现的问题, 整理一下, 方便之后使用.


目录概览

1. 导航栏

导航栏高度一直是固定的64P, 到了iOS11这个规则被打破了, 除了iPhoneX全面屏, 刘海等适配问题, 还增加了大标题的属性, titleView支持autolayout;

大标题示例

//根据prefersLargeTitles设置, 默认为NO;
 self.navigationController.navigationBar.prefersLargeTitles = YES;

下方附一个导航栏的对比图:


一般机型导航栏尺寸图(除了iPhoneX)

iPhoneX导航栏尺寸图
1.1 尺寸适配

sol 1: 宏定义高度

#define NAVIGATION_HEIGHT (CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]) + CGRectGetHeight(self.navigationController.navigationBar.frame))

#ifdef __IPHONE_11_0
if (@available(iOS 11.0, *)) {
self.navigationBar.frame = CGRectMake(0, STATUSBAR_HEIGHT,ScreenWidth, NAVIGATION_HEIGHT);
}
#endif

sol 2: 工具类获取高度

@implementation TestUtil
+ (CGFloat)navigationBarHeight {
    if (IS_iPhoneX) {
        return 88.0f;
    }
    return 64.0f;
}
@end
#define IS_iPhoneX ([UIScreen mainScreen].bounds.size.width == 375 && [UIScreen mainScreen].bounds.size.height == 812)
1.2 titleView扩展
//titleView自扩展尺寸, 需要自定义view实现该方法
- (CGSize)intrinsicContentSize {
    return UILayoutFittingExpandedSize;
}
1.3 返回按钮偏移

返回按钮向下偏移;

//设置navigationController的backIndicatorImage和backIndicatorTransitionMaskImage
UIImage *backButtonImage = [[UIImage imageNamed:@"icon_tabbar_back"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.navigationBar.backIndicatorImage = backButtonImage;
self.navigationBar.backIndicatorTransitionMaskImage = backButtonImage;

2. 安全区域(内容部分)

关于安全区域, tableView废弃了automaticallyAdjustsScrollViewInsets属性; estimatedRowHeight, estimatedSectionHeaderHeight estimatedSectionFooterHeight三个高度估算属性由默认的0变成了UITableViewAutomaticDimension;当然了, 这个是造成UI紊乱的原因, 值得一提的是tableView的新特性;

  • 设置delaysContentTouchesNO, 不会立即触发cell的响应事件;
  • 两根手指快速的轻击cell,可以同时选中两个cell进入编辑状态。如果两个手指存在不同步问题,则会默认识别其中的一个手指表示单选cell;
  • 新增了一个属性separatorInsetReference可以自定义一个cell分割线的边距;
  • cell或者表头表尾默认采用自适应高度的方案(造成UI紊乱的原因);
  • 增加了numberOfLines属性来实现类似于UILabel一样的高度自适应变化;
2.1 顶部偏移

automaticallyAdjustsScrollViewInsets属性被废弃,顶部就多了一些偏移;
**sol 1: **

if (@available(iOS 11.0, *)) {
    self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
    self.automaticallyAdjustsScrollViewInsets = NO;
}

**sol 2: **

//iOS11 解决SafeArea的问题,同时能解决pop时上级页面scrollView抖动的问题
if (@available(iOS 11, *)) {
[UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; 
}

**sol 3: **

#define  adjustsScrollViewInsets_NO(scrollView,vc)\do { \_Pragma("clang diagnostic push") \_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \if ([UIScrollView instancesRespondToSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:")]) {\[scrollView  performSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:") withObject:@(2)];\} else {\vc.automaticallyAdjustsScrollViewInsets = NO;\}\_Pragma("clang diagnostic pop") \} while (0)

网友还出现了webView会向下移动部分距离的问题;

if (@available(iOS 11.0, *)) {
webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
// Fallback on earlier versions
}
2.2 cell间隔变大

**sol 1: **

self.table.estimatedRowHeight = 0;
self.table.estimatedSectionHeaderHeight = 0;
self.table.estimatedSectionFooterHeight = 0;

**sol 2: **

//解决iOS11,仅实现heightForHeaderInSection,没有实现viewForHeaderInSection方法时,section间距大的问题
[UITableView appearance].estimatedRowHeight = 0;
[UITableView appearance].estimatedSectionHeaderHeight = 0;
[UITableView appearance].estimatedSectionFooterHeight = 0;

3. 底部区域(tabBar)

底部区域主要是iPhoneX与其他机型不一样, 一般机型高度为49, iPhoneX为83;

适配问题
#define kTabBarHeight ([[UIApplication sharedApplication] statusBarFrame].size.height>20?83:49)

4. 其他问题

在IOS11,原有的NSLocationAlwaysUsageDeion被降级为NSLocationWhenInUseUsageDeion;

4.1 系统获取权限框未弹出

需要在plist文件中配置NSLocationAlwaysAndWhenInUseUsageDeion,系统框才会弹出;使用requestAlwaysAuthorization获取权限 IOS11系统弹框会把几种权限级别全部列出,供用户选择;

   NSLocationUsageDescription
   获取地理位置,精准推送服务
   NSLocationWhenInUseUsageDescription
   获取地理位置,精准推送服务
   NSLocationAlwaysUsageDescription
   App需要您的同意,才能始终访问位置
   NSLocationAlwaysAndWhenInUseUsageDeion
   App需要您的同意,才能始终访问位置
4.2 iPhone X上运行缓冲页有黑色区域

sol 1: 添加iPhoneX的Launch图1125x2436
使用LaunchScreen来当做缓冲页或者修改Assets中的LaunchImage,添加iPhoneX的Launch图1125*2436(竖屏);

sol 2: 修改Contents.json文件

{
"extent" : "full-screen",
"idiom" : "iphone",
"subtype" : "2436h",
"filename" : "1125_2436.png”,
"minimum-system-version" : "11.0",
"orientation" : "portrait",
"scale" : "3x"
}

sol 2: 使用 LaunchScreen.storyboard 设置启动图
使用 LaunchScreen.storyboard 文件将简单视图约束定位,实现各种尺寸的自适应。

4.3 第三方依赖库问题

ReactiveCocoa Unknown warning group ‘-Wreceiver-is-weak’,ignored警告;

#define RACObserve(TARGET, KEYPATH) \
    ({ \
        _Pragma("clang diagnostic push") \
        _Pragma("clang diagnostic ignored \"-Wreceiver-is-weak\"") \
        __weak id target_ = (TARGET); \
        [target_ rac_valuesForKeyPath:@keypath(TARGET, KEYPATH) observer:self]; \
        _Pragma("clang diagnostic pop") \
    })
4.4 xib编译问题

一般是打开以前的工程, 编译的时候xib报错, 例如:
warning: Internationalization is not available when compiling for targets before iOS 6.0
解决办法:
选择编译错误的xib文件,找到Builds for 改为iOS 7.0 and Later

4.5 相册权限变更

iOS11以前:
NSPhotoLibraryUsageDescription:访问相册和存储照片到相册(读写),会出现用户授权;

iOS11之后:
NSPhotoLibraryUsageDescription:无需添加。默认开启访问相册权限(读),无需用户授权;
NSPhotoLibraryAddUsageDescription: 添加内容到相册(写),会出现用户授权;

4.6 跳转App Store评论变更

iOS11以前:

- (void)goToAppStore
{
 NSString *itunesurl = @"[http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=XXXXXXXX&pageNumber=0&sortOrdering=2&type=Purple](http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=XXXXXXXX&pageNumber=0&sortOrdering=2&type=Purple)+Software&mt=8";
 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:itunesurl]]; 
}

iOS11之后:

- (void)goToAppStore 
{
NSString *itunesurl = @
"itms-[apps://itunes.apple.com/cn/app/idXXXXXX?mt=8&action=write-review](apps://itunes.apple.com/cn/app/idXXXXXX?mt=8&action=write-review)";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:itunesurl]];
}

注:XXX为你自己的APP ID;

这些问题是网友们趟过的坑,希望简友们如果遇到过其他问题, 能积极补充, 共同进步;

题外话

一个人的国庆, 浪不起来, 写篇博客压压惊😓

参考文章:
关于iPhone X、iOS 11 、Xcode9,我们应该知道这些
iOS11就问你一句“惊不惊喜?意不意外?”5.8的苦笑。。。。。
iOS11 适配之导航栏、tableView、searchBar遇到的bug
简书App适配iOS 11
10分钟适配 iOS 11 & iPhone X
iOS11开发 新增功能大全
iPhone X + iOS 11 适配指南
iOS 11适配之跳转App Store评论

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

推荐阅读更多精彩内容

  • 殷羽的《饕餮记》是一部冠以神兽之名的神作。书中所书所写,均是以饕餮、白泽等上古神兽为主角,穿插以动人心弦的故事情节...
    9c42a2489e1d阅读 451评论 0 5
  • 我妈是老师,常说当年喜欢的学生最后都不来往,街上见了都低头走过,倒是那些差等生,毕业后对老师热情有加。 当年我听了...
    厚壁阅读 2,480评论 19 7
  • 工作一年,体会到了生活的恶意。工作忙得昏天暗地,没有白天黑夜的概念,也没有工作日周末的概念。浑浑噩噩,脾气也涨了不...
    慢慢来123阅读 313评论 0 0
  • 走进星巴克的人可能会注意到这样一款外形有点像细长牛奶瓶的保温瓶,唯美的设计、优美的造型让它往往一眼就能被消费者看到...
    伯凡时间阅读 744评论 0 0
  • 最后一课,平静如往昔,惯看秋月春风的我,时光远逝,心中早激不起一丝微澜,踏着铃声依旧匆匆走进5206班教...
    随意阳光阅读 388评论 4 4