iOS UIButton用约束调整imageView和title
2021-04-07 本文已影响0人
随你丫居士
在网上找的文章都是通过frame去设置的,对于用约束构建的项目不是很友好,今天决定解决下
经过一上午的实验,发现当开发人员 第一次设置UIButton
的约束后
系统会自动生成UIButton
的imageView
和titleLabel
的约束 按照默认的左图右文字的方式
这时我们在更改或新增针对imageView
和titleLabel
的约束就会产生冲突
解决问题主要依靠以下知识点
- Masonry 设定的约束会有标识 kInstalledConstraintsKey
- mas_remakeConstraints 重置并重新设置约束 将removeExisting = YES 需注意只能重置Masonry设定的约束
- titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
imageView.translatesAutoresizingMaskIntoConstraints = NO;
属性虽然设置成功 但没有用 - 同级view之间的约束会添加在父视图上
- 约束的获取和删除
关键代码如下即可任意调整 imageView
和titleLabel
两者之间的位置(上下左右)
已测试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];
}
总结
- 遇到问题要拆分
- 程序员应当耐心,细致,理性