大家在做iOS11 适配scrollView滚动导致的页面位置不对,是否用过了如下代码
// iOS11 UIScrollView适配
if(@available(iOS11.0, *)) {
UIScrollView.appearance.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
UITableView.appearance.estimatedRowHeight = 0;
UITableView.appearance.estimatedSectionFooterHeight = 0;
UITableView.appearance.estimatedSectionHeaderHeight = 0;
UITableView.appearance.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
重点讨论的是如下代码!!!这一行慎重填写!!!
UITableView.appearance.estimatedRowHeight = 0;
首先在Xcode的项目中都是默认开启自动布局,也就是说你可以通过约束来决定cell的高度,不需要通过代理协议和设置UITableView.rowHeight来实现cell高度,只需要你将cell的高度约束设置好,系统会自动计算。
//系统默认的是
UITableView.appearance.estimatedRowHeight = UITableViewAutomaticDimension;
但是如果你实现了(假如你的tableview有大量的数据和计算高度,不建议实现)
UITableView.appearance.estimatedRowHeight = 0;
优点:你可以从容的通过tableview.contentSize来获取tableView的正确内容高度。
缺点:会导致你的所有自动计算高度失效,每次tableview reloadData 都会重新计算tableview的所有内容高度,也就是所有返回高度的代理都会执行,从而导致刷新的时候占用高额的资源,特别是有大量数据的时候存在卡顿的现象。
中间解决方案:每个tableView根据具体的业务需求来使用tableView.estimatedRowHeight = UITableViewAutomaticDimension;
而不是UITableView.appearance.estimatedRowHeight=0.