首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mas_updateConstraints没有消除砌体中的约束

mas_updateConstraints没有消除砌体中的约束
EN

Stack Overflow用户
提问于 2015-07-05 03:35:26
回答 1查看 1.8K关注 0票数 2

我在我的UITableViewCell中使用UITableViewCell,这个单元格有两个子视图,一个是contentLabel,另一个是imageView。虽然imageView并不总是存在,但如果单元格有一个映像url,则呈现它或隐藏它。如果imageView是隐藏的,我希望将contentLabel设置为cell.contentView.bottom为另一个值,如下所示:

代码语言:javascript
复制
  [_contentLabel mas_makeConstraints:^(MASConstraintMaker *make) {
    make.left.equalTo(self.contentView.mas_left);
    make.top.equalTo(self.contentView.mas_bottom).offset(20);
    make.right.equalTo(self.contentView.mas_right).offset(-6);
    _bottomConstraint = make.bottom.equalTo(_imageView.mas_top).offset(-14);
  }];

  [_imageView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.left.equalTo(_contentLabel.mas_left);
    make.bottom.equalTo(self.contentView.mas_bottom).offset(-14);
  }];

  if (tweet.imageUrl) {
    _imageView.hidden = NO;
    [_imageView sd_setImageWithURL:tweet.imageUrl placeholderImage:[UIImage imageNamed:@"loading"] options:0];
  } else {
    _imageView.hidden = YES;
    [_imageView sd_setImageWithURL:NULL];
  }

  if (_imageView.hidden) {
    [_contentLabel mas_updateConstraints:^(MASConstraintMaker *make) {
      make.bottom.equalTo(_imageView.mas_top).offset(0);
    }];
  }

但我总是在下面得到错误信息:

代码语言:javascript
复制
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. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<MASLayoutConstraint:0x7fef9cd178d0 UILabel:0x7fef9cd437e0.bottom == UIImageView:0x7fef9cd26260.top - 14>",
    "<MASLayoutConstraint:0x7fef9caf5430 UILabel:0x7fef9cd437e0.bottom == UIImageView:0x7fef9cd26260.top>"
)

Will attempt to recover by breaking constraint 
<MASLayoutConstraint:0x7fef9caf5430 UILabel:0x7fef9cd437e0.bottom == UIImageView:0x7fef9cd26260.top>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

这似乎是mas_updateConstraints并没有删除旧的约束,而是添加了一个新的约束,这两个约束相互冲突。那么,如何在运行时动态更新约束值呢?

EN

回答 1

Stack Overflow用户

发布于 2016-03-10 19:48:19

也许这不是你的问题,但它可能会帮助别人:

我的问题主要有以下几点:

我首先为UIView的子类分配了一个高度约束:

代码语言:javascript
复制
make.height.equalTo(label); // label is another subclass of UIView

后来,我尝试使用以下方法“更新”此约束:

代码语言:javascript
复制
make.height.equalTo(@(newHeight)); // newHeight is a CGFloat  

这留下了原来的约束,并添加了一个与第一个约束相冲突的新约束。

然后,我将第一个约束的分配更改为:

代码语言:javascript
复制
CGFloat labelHeight = label.frame.size.height;
make.height.equalTo(@(labelHeight)); 

…冲突就消失了。

显然,iOS砌体不能用UIView定义的约束更新NSNumber定义的约束。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31226925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档