在cell的updateConstraints更新高度约束,有冲突

一、问题发生

用Masonry 来写UITableview的高度自动计算的时候。UITableViewCell 里面放置了一个UIImageView,这个UIImageView 跟cell 上下左右差距10个像素,

    [self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.contentView).with.inset(10);
    }];

会出现警告:

[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.
(
"<MASLayoutConstraint:0x6000002a3cc0 UIImageView:xxxxxxxxx.top == UITableViewCellContentView:0x7fe202c2a050.top + 10>",
"<MASLayoutConstraint:0x6000002a3d80 UIImageView:xxxxxxxxx.bottom == UITableViewCellContentView:0x7fe202c2a050.bottom - 10>",
"<MASLayoutConstraint:0x6000002a5820 UIImageView:xxxxxxxxx.height == 132.5>",
"<NSLayoutConstraint:0x600000286c70 UITableViewCellContentView:0x7fe202c2a050.height == 43.5>"
)

看到这个警告的时候,猜测原因是因为一开始Cell创建的时候,设置了上下左右的高度,但是由于bottom - top的高度小于UIImageView的高度。这时候UIimageView的高度又依赖于cell的高度来调整。就会出现这个警告。

上网查了一个,碰到这个问题的人不在少数,最后的解决方案是改成

    [self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
      make.edges.equalTo(self.contentView).with.inset(10).priority(MASLayoutPriorityDefaultLow);
    }];

通过降低优先级的办法来达到。这样警告就会消失。

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

推荐阅读更多精彩内容

  • 写在前面 iOS的的布局机制「auto layout」不是一个新概念,它早在iOS 6中就推出来了,当下距离iOS...
    西门淋雨阅读 5,457评论 2 4
  • 用xib自定义cell时,给label的添加约束:(top:10, leading:10, trailing:10...
    tanlon阅读 4,585评论 0 0
  • 惊雷不断, 大雨哗啦啦地下了一地 是你,唤醒了我 用大雨洗刷我干燥的灵魂 我的胸膛里冒出雨水被干土地吮吸的声音 你...
    岳一阅读 2,944评论 0 3
  • 跑步之于我,本来是作为一种减肥方式而存在的。自从读了研究生之后,刚刚进实验室时脑海里充满着迷茫,于是便开始没日没夜...
    赵旺财阅读 3,153评论 0 4
  • 海棠社第77社 主题:拾光 体裁:不限 文/寒霜 【原创】 拾光 风中揽梅香,黄昏拾夕阳。 手持韶华箭,轻叹急离殇...
    刘寒霜阅读 2,744评论 60 27