2021-12-03 iOS记录适配iOS 11和自动布局的坑

大家在做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.



©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容