有时我们在给UILabel或者UITextField这种带IntrinsicHeight和IntrinsicWidth类型的视图做约束时,约束的结果会出乎我们的意料。
例如下面这样:
UILabel *label1 = [[UILabel alloc] init];
label1.text = @"我是label1";
label1.textColor = [UIColor blackColor];
label1.backgroundColor = [UIColor purpleColor];
[self.view addSubview:label1];
UILabel *label2 = [[UILabel alloc] init];
label2.text = @"我是label2";
label2.backgroundColor = [UIColor yellowColor];
label2.textColor = [UIColor blackColor];
[self.view addSubview:label2];
[label1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view);
make.top.equalTo(self.view);
}];
[label2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.view);
make.top.equalTo(self.view);
make.left.equalTo(label1.mas_right);
}];
561534842242_.pic.jpg
因为UILabel默认的hugging优先级是250,当2个UILabel或者UITextField视图需要拉伸或者压缩时,系统不知道该拉伸谁或者压缩谁,这时需要我们手动的设置优先级。
上面的情况我们可以设置下label1的HuggingPriority更高,那么系统会优先压缩label1。
[label1 setContentHuggingPriority:UILayoutPriorityDefaultHigh
forAxis:UILayoutConstraintAxisHorizontal];
同理,设置CompressionResistancePriority级别更低也是可以的。设置完后的效果是下面这样的。
551534842145_.pic.jpg
网友评论