HuggingPriority和CompressionResis

2018-08-21  本文已影响18人  艺术农

有时我们在给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
上一篇下一篇

猜你喜欢

热点阅读