iOS11和Xcode9踩坑
tableview
headerView/footerView
问题描述:
只实现tableView:heightForFooterInSection:
或tableView:heightForHeaderInSection:
方法返回section的header/footer高度时header/footer会使用默认值,如下图,只返回了footer的高度,没有返回footer的对象。
解决方法(2种):
需要控制header/footer的高度还需要实现
tableView:viewForHeaderInSection:或tableView:viewForFooterInSection:方法。如图,即使是返回nil也会使高度设置生效
通过将tableview新增的estimatedSectionHeaderHeight和estimatedSectionFooterHeight属性设置为0,如下图
BarButtonItem
设置负width失效
问题描述:
像往常一样,创建了两个barButtonItem,一个作为按钮,一个作为调整宽度的,将width设置为了-10,但是Xcode9编译运行后,并不是想要的按钮的位置向右缩减了10,如图:
但是在设置其width>0是会生效的
解决方法:
创建一个UIButton并设置其title/imageEdgeInsets,然后通过customView创建UIBarButtonItem。
设定了样式后点击样式
问题描述:
在Xcode9之前,通过-setTitleTextAttributes:forState:
方式设定UIBarButtonItem的样式,只需要设定UIControlStateNormal
的时候即可同时让其他状态也会使用相同的样式,而Xcode9只会设置Normal的样式,在按下高亮时还是默认的样式。
解决方法(2种):
- 同样给
UIControlStateHighlighted
状态设定一下样式。
- 或者将UIBarButtonItem使用UIButton作为customView创建,UIButton没有出现这个问题。
ToolBar上Item点击失效
问题描述:
- 创建一个全屏的半透明View并在这个View上放置一个tapGesture
- 创建一个toolBar放在这个View上
- 通过
-initWithTitle:target:action:
方法创建一个UIBarButtonItem放置在toolbar上 - 点击这个UIBarButtonItem,发现其有高亮状态但是点击被tapGesture响应
问题仅在Xcode9+iOS11
上出现。Xcode8+iOS11
或Xcode9+iOS10
无法复现,大致样式如下图
解决方法(2种):
个人更倾向于第二种
- 再创建一个View放置在上半截位置上,然后将tapGesture添加给这个只有半截的View上
- 将UIBarButtonItem的初始化方法改为通过customView初始化,使用UIButton作为customView
App图标丢失
问题描述:
使用Xcode9+CocoaPods的工程在编译运行后,会出现AppIcon丢失的问题
解决方法:
参考CocoaPods-Issue7003的方法,但是issues里建议的脚本在我这边运行会报错找不到:
后通过翻查Podfile-syntax以及ruby-pod-AggregateTarget找到其属性client_root可以获取项目路径,最终结合Issue7003里的脚本,插入到Podfile中,执行pod install后,即可
1 | post_install do |installer| |
部分宏定义失效
问题描述:
我们使用的一个库中check_compile_time()
报错,如下图:
排查过程:
但是使用Xcode9无法跳转其定义,使用Xcode8跳转后发现其实际是__Check_Compile_Time()
,如下图:
然后再回到Xcode9改为了__Check_Compile_Time()后点击跳转定义文件里发现,提示一些原来的宏被更改名称为__开头了:
解决方法:
将上图中提示的相关的宏定义替换成新的即可