测试环境:
Xcode 9.2
Swift 4.0
iOS 11.2
假如从 ViewControllerA push 到 ViewControllerB,B 中添加了一个 tableview,表格有多个分组,每个分组都设置了表头和表尾(高度各 20 pt),为了方便起见,我将表格的背景设置成 yellow,表头背景 red,表尾背景 green,这时候有几种情况:
1、tableview 的初始化直接写在 viewDidLoad 方法中,很好,除了表头和表尾之外,没有多余的间隔:
2、如果在 viewDidLoad 方法中初始化一个按钮,然后将 tableview 的初始化放在该按钮的触发事件里,又或者是在 viewDidLoad 中进行 alamofire 网络请求,然后 tableview 的初始化放在成功闭包中进行,可以看到此时第一个分组的头部和最后一个分组的尾部将出现多余间隔,分别是 35pt 和 20pt:
3、如果将 tableview 设置成 plain 样式,则不会出现上述问题,但此时表头和表尾都会悬停,可能满足不了一些特定的开发需求;
出现多余间隔的原因现在还不得而知,网上查了不少资料,出现头部多余间隔的问题也挺多的,但没出现尾部也有多余间隔。而且头部间隔一般是 20pt,但我这遇到的确是头部 35pt,尾部 20pt。网上也有不少解决方案,例如:
1、设置 tableHeaderView 和 tableFooterView:
let view = UIView()
view.frame = CGRect(x: 0, y: 0, width: 0, height: 0.01)
self.tableView.tableHeaderView = view
self.tableView. tableFooterView = view
用该方法设置后,头部的多余间隔是去除了,但尾部的间隔还是存在;
2、直接设置 tableview 的 contentInset:
self.tableView.contentInset = UIEdgeInsetsMake(-35, 0, -20, 0)
该方法是目前测试下来最好的方法。