美文网首页
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