IOS 使用Masonry+UITableViewCell布局时解决控制台输出的警告

代码适配,Masonry一般是首选的。项目中tableview使用最多,那么肯定少不了自定义的cell和view,这就牵涉到控件的布局。

使用过Masonry的都知道,有的时候控制台会输出很多警告,但是布局是正常的,这是为什么呢?


[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. 
(
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
)

Will attempt to recover by breaking constraint 


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

从输出的信息可以知道,有的控件的约束明显重复了设置,所以指出了是哪个控件,重复设置了哪些约束等等。。。。

Masonry可以设置约束的优先级,优先级分为priorityHigh,priorityMedium,priorityLow(高,中等,低)三个等级。优先级默认为中等,所以当我们对某一个控件的约束条件重复后,会打印警告信息,告诉我们应该去修复它们。

既然知道了警告的产生原因,那么解决办法有两种:
1.找到该控件,修改它的相关约束,以消除警告信息。
2.将控件的约束优先级置为高级,那么就算约束重复了也不会有警告。这也是最简单省事的办法。

处理方法:

[self.labelTitle mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(self.contentView.mas_top).offset(0);
        make.left.mas_equalTo(self.contentView.mas_left).offset(25);
        make.right.mas_equalTo(self.contentView.mas_right).offset(0);
        make.bottom.mas_equalTo(self.contentView.mas_bottom).offset(0).priorityHigh(1000);
        make.height.equalTo(@(25));
    }];

你可能感兴趣的:(IOS 使用Masonry+UITableViewCell布局时解决控制台输出的警告)