一, 在隐藏系统导航栏的时候, UITableView 内容默认向下偏移量
1. 自定义状态栏代替系统状态栏
为了响应产品需求, 需要把用特殊样式的导航栏, 因此需要隐藏系统的状态栏, 用自定义的状态栏代替.
2. 层次结构图
1> 使用层次结构图观察, UITableView的位置时正常的, 里面的UITableViewWrapperView 向下偏移了20个点.
2> ① UITableViewWrapperView的初始时偏移, 滑动时不偏移.
② 在弹幕内容量超过一页的时候, 向上拖拽到底部, 再看层次结构, UITableViewWrapperView没有发生偏移了.
3> 可以推断出, UITableView的 contentInset 发生了变化.
4> contentInset 只会改变 scrollview 内容的起点平衡位置, 不会改变它的滑动范围(contentSize).
3. UIViewController 的 automaticallyAdjustsScrollViewInsets属性
1> 想起了之前遇到过的一个属性 automaticallyAdjustsScrollViewInsets属性, 设置成 NO 以后, 彻底根治这个问题了.
2>该属性的默认值是YES, 作用就是当导航栏隐藏时, 系统会根据状态栏的显示或隐藏, 确定是否更改当前控制器 view 中的 scrollview 的 contentInset.
3> 使用组合原理, 对状态栏和导航栏分别进行了显示和隐藏操作.
4> 结论1: 只要导航栏不隐藏, 控制器的 view 的 frame 就会从导航栏的底部开始算起...只有导航栏隐藏, 控制器的 view 的 frame 才会从状态栏的起点开始算起.
5> 结论2: 只有在导航栏隐藏的时候, 控制器 view 和状态栏 frame 的起点才会一致, 如果状态栏不隐藏, 就会在一开始遮住 scrollview 的顶部....
因此需要在保证 scrollview 的 frame 不变的情况下, 让 scrollview 有一个默认的初始的向下偏移量.
二, UITableView的底部多余的cell和下划线
1> UITableView在 tableFooterView 属性为空的时候, 会显示很多 cell.
2> 可以使用tableView.tableFooterView = [UIView new]
代码, 来让 tableview 停止显示 cell.