最新消息:iOS编程开发交流群(6906921) ,Mac.Cocoa开发交流群(7758675) 欢迎iOS/macOS开发编程爱好及学习者加入!

iOS11及Xcode9适配问题汇总

iOS 天狐 5106浏览 0评论

iOS11需要适配的地方

SDK API兼容

编译时检查SDK版本,运行时检查系统版本,不同版本的SDK API并不是一句 if ([UIDevice currentDevice].systemVersion.floatValue 或者一句if (@available)能解决的。还要结合宏定义来进行SDK编译时判断。

更多请参考iOS开发之SDK兼容性指南

StatusBar与Tabbar高度变化

在iPhone X系统会自动修改StatusBar与Tabbar的高度,Tabbar从49pt变为83pt。StatusBar由20pt变为了44pt

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 不执行

UITableView:默认开启Self-Sizing,Headers, footers, and cells都默认开启Self-Sizing,所有estimated 高度默认值从iOS11之前的 0 改变为UITableViewAutomaticDimension,大概就是说我们不再需要自己去计算cell的高度了,只要设置好这两个属性,约束好布局,系统会自动计算好cell的高度。

iOS 11上会导致tableView顶部留白,原因是代码中只实现了heightForHeaderInSection方法,而没有实现viewForHeaderInSection方法。iOS 11之后应该是由于开启了估算行高机制引起了bug。添加上viewForHeaderInSection方法后,问题就解决了。或者添加以下代码关闭估算行高,问题也得到解决。

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

automaticallyAdjustsScrollViewInsets 被废弃,TabView,CollectionView间距问题

解决方案

automaticallyAdjustsScrollViewInsets属性已经不再使用,我们需要使用UIScrollViewcontentInsetAdjustmentBehavior 属性来替代它.

设置适当的枚举

NSLocationAlwaysAndWhenInUseUsageDeion

在iOS11,原有的NSLocationAlwaysUsageDeion被降级为NSLocationWhenInUseUsageDeion。因此,在原来项目中使用requestAlwaysAuthorization获取定位权限,而未在plist文件中配置NSLocationAlwaysAndWhenInUseUsageDeion,系统框不会弹出。

iPhone X状态栏图标元素结构变了

我们之前通过遍历foregroundView,UIStatusBarDataNetworkItemView可以找到wifi信号强度。

由于iPhoneX的留海设计,所以元素与布局都发现了变化。

断点后执行

即可查看新的结构

NavgationBar变化

1、导航栏新增了一种大标题样式,默认设置是不开启,所以不需要修改。如果开启大标题样式 iPhone X的顶部高度为44 +44+52 = 140,其他机型为20 +44+52 = 116

2、titleView支持autolayout,这要求titleView必须是能够自撑开的或实现了- intrinsicContentSize

解决方案

滑动删除会崩

在iOS8之后,苹果官方增加了UITableVIew的右滑操作接口,即新增了一个代理方法(tableView: editActionsForRowAtIndexPath:)和一个类(UITableViewRowAction),代理方法返回的是一个数组,我们可以在这个代理方法中定义所需要的操作按钮(删除、置顶等),这些按钮的类就是UITableViewRowAction。这个类只能定义按钮的显示文字、背景色、和按钮事件。并且返回数组的第一个元素在UITableViewCell的最右侧显示,最后一个元素在最左侧显示。

从iOS 11开始有了一些改变,首先是可以给这些按钮添加图片了,然后是如果实现了以下两个iOS 11新增的代理方法,将会取代(tableView: editActionsForRowAtIndexPath:)代理方法:

Xcode9问题

文件拖拽

拖拽类或者资源文件工程,即使选了copy file in need, 选了target,等拖入项目后,文件是进去了,但是traget真实并没有选上。所有找不到类,使用不了资源。

解决办法只能是事后选择target,或者右键Project navgation,add file来添加文件。

Xcode9运行项目会发现App没有充满屏幕,上下会有黑色区域

解决方案:

添加1125 * 2436启动图,或者使用LaunchScreen.storyboard

更多阅读

iOS 11 UIKit の変更点

转载请注明:天狐博客 » iOS11及Xcode9适配问题汇总

微信 OR 支付宝 扫描二维码
为天狐 打赏
非常感谢你的支持,哥会继续努力!
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址