美文网首页
UITableViewCell 自动计算高度下autolayou

UITableViewCell 自动计算高度下autolayou

作者: Nicholasty | 来源:发表于2022-02-10 18:49 被阅读0次

    前言:
    当cell内容是不固定时,我们可以通过autolayout 来完成自动高度计算,而不必手动计算。
    但这里往往会遇到一个问题:
        第一次完成cell布局后,当填充cell的数据发生变化,我们手动更新约束时,比如使用masonry的mas_makeConstraints更新时,可能会在控制台看到以下约束冲突警告

    [LayoutConstraints] Unable to simultaneously satisfy constraints.
        Probably at least one of the constraints in the following list is one you don't want. 
        Try this: 
            (1) look at each constraint and try to figure out which you don't expect; 
            (2) find the code that added the unwanted constraint or constraints and fix it. 
    

    先说解决方案:
        如果要去掉以上警告,我们需要调低下cell中子控件约束的优先级,理论上是降低任一子控件的垂直方向上的约束都可以,但通常为了统一,往往是调整位于cell中最底下的那个子控件与cell的bottom间的约束优先级参数。

    再说为什么需要这么做及为什么能这么做:
        之所以出现冲突警告是因为cell在完成布局后,系统会自动给cell的高度加上一条约束,并且优先级是1000;而当数据变化导致控件高度发生改变从而引起cell的底部约束-cell的顶部 ≠系统计算好的cell高度约束,系统就会报出约束冲突。

        但是,虽然报了约束冲突警告,但我们看到的cell UI显示却符合预期,高度正常更新。这是因为在runloop在下一轮UI重绘时,Cell又会重新根据控件的约束计算cell高度,然后更新自身高度约束。

    因此,解决方案就可以简单的调整优先级来避免触发冲突警告。

    相关文章

      网友评论

          本文标题:UITableViewCell 自动计算高度下autolayou

          本文链接:https://www.haomeiwen.com/subject/jecokrtx.html