随着Xcode GM版本发布,适配iOS 11也就提上了日程,总的来说整个适配过程(不包含适配iPhone X)不是很麻烦。

首先建议观看今年WWDC的一个视频 Updating Your App for iOS 11,视频讲解了iOS 11一些API的变化,对理解适配过程有帮助。

navigation bar

1、导航栏新增了一种大标题样式,默认设置是不开启,所以不需要修改。
2、titleView支持autolayout,这要求titleView必须是能够自撑开的或实现了- intrinsicContentSize,简书的搜索就变成下面这样了

搜索

解决办法比较简单,这个搜索框对应的view实现- intrinsicContentSize方法

- (CGSize)intrinsicContentSize {return UILayoutFittingExpandedSize;
}

安全区域适配

iOS 11中ViewController的automaticallyAdjustsScrollViewInsets属性被废弃了,导致了这两个页面出现了问题

image.png

image.png

这两个页面都隐藏了系统导航栏,自定义导航栏。

self.automaticallyAdjustsScrollViewInsets = NO;
self.extendedLayoutIncludesOpaqueBars = YES;
self.edgesForExtendedLayout = UIRectEdgeTop;

automaticallyAdjustsScrollViewInsets属性被废弃了,顶部就多了一定的inset,关于安全区域适配,简书上的这篇文章iOS 11 安全区域适配总结介绍得非常详细,请参考这篇文章。

我们采用了比较简单的方法

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

导航栏返回按钮

image.png

之前的代码通过下面的方式自定义返回按钮

UIImage *backButtonImage = [[UIImage imageNamed:@"icon_tabbar_back"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 18, 0, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImageforState:UIControlStateNormalbarMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)forBarMetrics:UIBarMetricsDefault];

iOS 11 中setBackButtonTitlePositionAdjustment:UIOffsetMake没法把按钮移出navigation bar。
解决方法是设置navigationController的backIndicatorImagebackIndicatorTransitionMaskImage

UIImage *backButtonImage = [[UIImage imageNamed:@"icon_tabbar_back"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.navigationBar.backIndicatorImage = backButtonImage;
self.navigationBar.backIndicatorTransitionMaskImage = backButtonImage;

tableview问题

右边为正确样式

iOS 11中如果不实现-tableView: viewForFooterInSection: 和 -tableView: viewForHeaderInSection:,那么-tableView: heightForHeaderInSection:- tableView: heightForFooterInSection:不会被调用。
这是因为estimatedRowHeight estimatedSectionHeaderHeight estimatedSectionFooterHeight三个高度估算属性由默认的0变成了UITableViewAutomaticDimension,导致高度计算不对,解决方法是实现对应方法或吧这三个属性设为0。
下面这个列表显示不全也是estimatedRowHeight引起,取contentSize出错。

image.png

第三方依赖库问题

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

ReactiveCocoa

简书项目开启Treat warning as error,所有警告都会被当成错误,因此必须解决掉。
RACObserve宏定义如下:

#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") \})

在之前的Xcode中如果消息接受者是一个weak对象,clang编译器会报receiver-is-weak警告,所以加了这段push&pop,最新的clang已经把这个警告给移除,所以没必要加push&pop了。
ReactiveCocoa已经不再维护OC版本,大多数OC开发者用的都是2.5这个版本,只能自己fork一份了,谁知github上的v2.5代码不包含对应的.podspec文件,只好到CocoaPods/Specs上将对应的json文件翻译成.podspec文件,如果你也有这个需要,可以修改Podfile如下

pod 'ReactiveCocoa', :git => 'https://github.com/zhao0/ReactiveCocoa.git', :tag => '2.5.2'

2、MGSwipeTableCell 崩溃

左滑cell

MGSwipeTableCell用于实现左滑菜单,在iOS 11上出现了崩溃,github上新版修复了,升级即可

简书App适配iOS 11相关推荐

  1. App适配iOS 11

    随着Xcode GM版本发布,适配iOS 11也就提上了日程,总的来说整个适配过程(不包含适配iPhone X)不是很麻烦. 首先建议观看今年WWDC的一个视频 Updating Your App f ...

  2. 你可能需要为你的 APP 适配 iOS 11

    为什么80%的码农都做不了架构师?>>>    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq. ...

  3. App 适配 iOS 11

    导语:iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆.动态的新风格. 本文介绍iOS11中在UI方面做了哪些更新,有些更新可以为用户提供更加完美的体验,但也有的可能会给目前的APP带来异 ...

  4. iOS - 适配iOS 11

    http://www.10tiao.com/html/330/201707/2653579210/1.html 存档 导语:iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆.动态的新风格. ...

  5. 从用户反馈看简书APP

    最近在系统地学习"第三节课"的产品经理课程.有一个模块是通过用户反馈发现问题,课间思考作业是以简书为例,整理简书在App store的点评情况.恰好我也是简书的用户,同时手机上也装 ...

  6. 适配iOS 11和iPhone X——导航栏、UITableView

    每年的WWDC大会都激动和紧张好一段时间.激动的是期待苹果的新产品带来的那些黑科技,尤其今年的iPhone10周年纪念款iPhone X.紧张的当然是iOS.Swift和Xcode的升级,又要加班了( ...

  7. 教你如何升级app适配iOS 7

    开始工作 在这篇教程中,我们会将一个为iOS 6设计的app<Treasure Hunt>升级适配iOS 7. Treasure Hunt是一个社交应用,允许用户分享藏宝图,用户们可以沉浸 ...

  8. 个性化简书App上传的图片

    一个需求,使用简书App上传图片时,在右下角添加"水印签名",比如: 新浪微博:允许用户定制图片右下角是否添加微博ID水印 图片发自简书App 调研不同用户的使用偏好,可以在图片右 ...

  9. 简书推荐作者风云榜(爬取简书app数据)

    一.前言 自处女作<爬取张佳玮138w+知乎关注者:数据可视化>一文分布后,来简书快一个月了(20170831).但一直不怎么熟悉这个平台,因此,这回爬取简书app里的推荐作者并进行简单可 ...

最新文章

  1. cad线性标注命令_CAD图纸中怎么进行线性标注
  2. c语言哈希表电子辞典_关于redis涉及的知识点,C语言如何操作redis
  3. Posix多线程编程—线程属性
  4. Spring创建Bean的3种方式
  5. hadoop等的下载地址
  6. 斑马无线打印服务器,如何设置斑马打印机无线WiFi
  7. Cannot find module '@babel/plugin-proposal-class-properties'
  8. 给定字符串,实现大小写之间的转换
  9. python安装pymssql等包时出现microsoft visual c++ 14.0 is required问题无需下载visualcppbuildtools的解决办法...
  10. 《小艾上班记》—— 读后总结
  11. Mongoose多数据库连接及实用样例
  12. caffe学习日记--lesson3:win8系统,VS2013下的caffe工程编译探究
  13. php的get和post,PHP中GET和POST区别
  14. map集合和set集合
  15. [机缘参悟-1] - 活在当下,仰望星空,梦在梦里,俯视天下
  16. Python基础之Scrapy简介
  17. 流媒体协议:互联网视频分发协议介绍(渐进式、HLS、DASH、HDS、RTMP协议)
  18. android获取wifi开关,Android WiFi开发(一)--WiFi开关与状态监听
  19. 24款神级插件,让你的 vscode更牛
  20. 第1期技术: DQN算法原理及实现过程

热门文章

  1. python选择题题目_《Python程序设计》题库 - 选择题
  2. 模块说和神经网络学说_2020山东教师招聘考试:带你领略脑机能学说
  3. Nmap使用教程 - 一
  4. 国信蓝点2011c本科概率问题
  5. 剑走偏锋--使用WMI获取远程计算机进程程序集中查毒病毒打造内网安全环境
  6. python控制摄像头拍照是反的_使用反向Shell控制摄像头
  7. cip核字号验证_CIP数据核字号是什么
  8. 【愚公系列】2023年06月 移动安全之安卓逆向(插桩及栈分析)
  9. Logging system failed to initialize using configuration from ‘classpath:logback.xml‘ 不一样的解释
  10. ftp密码破解——ncrack、hydra、medusa