前言:在写页面UI时发现,当躲藏了NavigationBar时,即便UITableView是从(0,0)进行布局,也会一直在手机状态栏下方进行展现布局,而我的想法是希望UITableView能够从状态栏处就进行展现布局
当时页面展现:
问题查找和排查:
经过进行修改tableHeaderView的坐标,发现无论如何将headerView的坐标往上移动都没有任何效果,仍在状态栏下展现。所以感觉得出这是一个体系的主动布局,经过查询资料,查到automaticallyAdjustsScrollViewInsets特点
automaticallyAdjustsScrollViewInsets特点:
涉及到automaticallyAdjustsScrollViewInsets特点,但实际上,从iOS 11开端,该特点已经被抛弃,并被contentInsetAdjustmentBehavior特点替代。
在iOS 11之前,automaticallyAdjustsScrollViewInsets用于控制UIViewController是否应该主动调整与翻滚视图(如UITableView)相关的内边距以考虑导航栏、标签栏等。当设置为true时,体系会主动为你调整翻滚视图的内边距,确保内容不会被这些视图遮挡。而在iOS 11及以上,这一概念得到了更新。
在iOS 11及以上,你应该运用contentInsetAdjustmentBehavior特点来控制翻滚视图的内边距调整行为。设置为.never表明不要主动调整内边距,从而防止体系在躲藏导航栏时向下调整内容。这样,你能够更精确地控制翻滚视图的布局。
总的来说,经过运用contentInsetAdjustmentBehavior,你能够在iOS 11及以上版别上更好地控制翻滚视图的内边距,以习惯你的布局需求。
问题处理思路和办法:
所以根据上方特点特征,能够得出便是因为这个特点而导致体系主动调整UITableView与状态栏之前的距离
处理问题:
myTableView = UITableView(frame: .zero, style: .grouped)
myTableView.tableHeaderView = tableHeaderView
myTableView.showsVerticalScrollIndicator = false
myTableView.separatorStyle = .none
myTableView.delegate = self
myTableView.dataSource = self
if #available(iOS 11.0, *) {
myTableView.contentInsetAdjustmentBehavior = .never
} else {
automaticallyAdjustsScrollViewInsets = false
}
myTableView.register(goodsCell.self, forCellReuseIdentifier: NSStringFromClass(goodsCell.self))
在初始化myTableView后,进即将automaticallyAdjustsScrollViewInsets特点进行关闭,以习惯自己的布局需求。
处理后页面展现:
希望文章对大家能够有所帮助,大家能够多多点赞和重视,以便后续学习不走失~