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新增的estimatedSectionHeaderHeightestimatedSectionFooterHeight属性设置为0,如下图
    iOS11-and-xcode9-adapt-02

BarButtonItem

设置负width失效

问题描述:

像往常一样,创建了两个barButtonItem,一个作为按钮,一个作为调整宽度的,将width设置为了-10,但是Xcode9编译运行后,并不是想要的按钮的位置向右缩减了10,如图:

iOS11-and-xcode9-adapt-03

但是在设置其width>0是会生效的

解决方法:

创建一个UIButton并设置其title/imageEdgeInsets,然后通过customView创建UIBarButtonItem。

iOS11-and-xcode9-adapt-04

设定了样式后点击样式

问题描述:

在Xcode9之前,通过-setTitleTextAttributes:forState:方式设定UIBarButtonItem的样式,只需要设定UIControlStateNormal的时候即可同时让其他状态也会使用相同的样式,而Xcode9只会设置Normal的样式,在按下高亮时还是默认的样式。
iOS11-and-xcode9-adapt-05

解决方法(2种):

  • 同样给UIControlStateHighlighted状态设定一下样式。
    iOS11-and-xcode9-adapt-06

  • 或者将UIBarButtonItem使用UIButton作为customView创建,UIButton没有出现这个问题。
    iOS11-and-xcode9-adapt-07

ToolBar上Item点击失效

问题描述:

  1. 创建一个全屏的半透明View并在这个View上放置一个tapGesture
  2. 创建一个toolBar放在这个View上
  3. 通过-initWithTitle:target:action:方法创建一个UIBarButtonItem放置在toolbar上
  4. 点击这个UIBarButtonItem,发现其有高亮状态但是点击被tapGesture响应
    问题仅在Xcode9+iOS11上出现。Xcode8+iOS11Xcode9+iOS10无法复现,大致样式如下图
    iOS11-and-xcode9-adapt-08

解决方法(2种):

个人更倾向于第二种

  • 再创建一个View放置在上半截位置上,然后将tapGesture添加给这个只有半截的View上
  • 将UIBarButtonItem的初始化方法改为通过customView初始化,使用UIButton作为customView

透明导航栏约束

部分宏定义失效

我们使用的一个库中check_compile_time()报错,但是使用Xcode9无法跳转其定义,

App图标丢失

问题描述:

使用Xcode9+CocoaPods的工程在编译运行后,会出现AppIcon丢失的问题

解决方法(2种):