很常

iOS UIButton用约束调整imageView和title

2021-04-07  本文已影响0人  随你丫居士

在网上找的文章都是通过frame去设置的,对于用约束构建的项目不是很友好,今天决定解决下

经过一上午的实验,发现当开发人员 第一次设置UIButton的约束后
系统会自动生成UIButtonimageViewtitleLabel的约束 按照默认的左图右文字的方式
这时我们在更改或新增针对imageViewtitleLabel 的约束就会产生冲突

解决问题主要依靠以下知识点

关键代码如下即可任意调整 imageViewtitleLabel两者之间的位置(上下左右)

已测试10.3.1 和14.3系统

-(void)updateViewConstraints{

    NSLog(@"%s---%@",__func__,@"先刷新");

//     box属性为UIButton
//    NSLog(@"self.box.titleLabel.constraints = %@",self.box.titleLabel.constraints);
//    NSLog(@"self.box.imageView.constraints = %@",self.box.imageView.constraints);
//    NSLog(@"self.box.constraints = %@",self.box.constraints);
  
  ////***************
    [self.box removeConstraints:self.box.constraints];

    [self.box mas_remakeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(10);
        make.right.mas_equalTo(-10);
        make.centerY.mas_equalTo(self.view);
        make.height.mas_equalTo(self.box.titleLabel.mas_height);
    }];
    NSLog(@"33333333");

    [self.box.titleLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(self.box.imageView.mas_right).offset(10).priority(1000);
        make.right.mas_equalTo(-10);


    }];

    NSLog(@"4444");
    [self.box.imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(0);
        make.centerY.mas_equalTo(self.box.mas_centerY);
        make.width.height.mas_equalTo(15);

    }];


//    NSLog(@"self.box.titleLabel.constraints0 = %@",self.box.titleLabel.constraints);
//    NSLog(@"self.box.titleLabel.constraints0 = 12312312");
//
//    NSLog(@"self.box.imageView.constraints0 = %@",self.box.imageView.constraints);
//    NSLog(@"self.box.constraints0 = %@",self.box.constraints);

    //刷新两次才搞定
    //_sendUpdateConstraintsIfNecessaryForSecondPass



    [super updateViewConstraints];
}

总结
上一篇下一篇

猜你喜欢

热点阅读