从 iOS7 开始,在我的顶部有额外的空间,UITableView它有一个样式UITableViewStyleGrouped。
UITableView
UITableViewStyleGrouped
这是一个例子:
tableview 从第一个箭头开始,有 35 个像素的无法解释的填充,然后绿色标题是 aUIView返回的viewForHeaderInSection(其中部分为 0)。
UIView
viewForHeaderInSection
谁能解释这 35 像素的数量来自哪里以及如何在不切换到 的情况下摆脱它UITableViewStylePlain?
UITableViewStylePlain
在 iOS 11 及更高版本中:
tableView.contentInsetAdjustmentBehavior = .never
我找到了原始错误的原因并创建了一个示例项目来展示它。我相信有一个iOS7错误。
从 iOS7 开始,如果你创建了一个带有 Grouped 样式的 UITableView,但在第一个布局上没有设置委托,那么你设置了一个委托并调用 reloadData,顶部将有一个 35px 的空间永远不会消失。
请参阅我制作的展示错误的项目:https ://github.com/esilverberg/TableViewDelayedDelegateBug
特别是这个文件:https ://github.com/esilverberg/TableViewDelayedDelegateBug/blob/master/TableViewDelayedDelegateBug/ViewController.m
如果第 24 行处于活动状态,
[self performSelector:@selector(updateDelegate) withObject:nil afterDelay:0.0];
顶部会有一个额外的 35 px 空间。如果第 27 行处于活动状态并且第 24 行被注释掉,
self.tableView.delegate = self;
顶部没有空间。就像 tableView 在某处缓存结果并且在设置委托并调用 reloadData 后不重绘自身。