美文网首页很常
iOS UIButton用约束调整imageView和title

iOS UIButton用约束调整imageView和title

作者: 随你丫居士 | 来源:发表于2021-04-07 15:04 被阅读0次

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

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

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

    • Masonry 设定的约束会有标识 kInstalledConstraintsKey
    • mas_remakeConstraints 重置并重新设置约束 将removeExisting = YES 需注意只能重置Masonry设定的约束
    • titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
      imageView.translatesAutoresizingMaskIntoConstraints = NO;
      属性虽然设置成功 但没有用
    • 同级view之间的约束会添加在父视图上
    • 约束的获取和删除
    关键代码如下即可任意调整 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];
    }
    
    
    总结
    • 遇到问题要拆分
    • 程序员应当耐心,细致,理性

    相关文章

      网友评论

        本文标题:iOS UIButton用约束调整imageView和title

        本文链接:https://www.haomeiwen.com/subject/azkukltx.html