关于UILabel的autolayout用法——子控件决定父控件的高度
程序员文章站
2022-06-08 16:31:25
...
今天讲一下关于UILable的autolayout的用法,这个控件有点特殊,就是如果你不做设置,只是在UILable上面设置文字内容,会发现文字内容并不能填充整个UILable,如图:
如果出现这种情况就会很尴尬了,那么我们今天就讲一下如何让文字填充整个label。我们现在有一个需求就是让父控件随着子控件的高度增加而增加,减小而减小,大家请先看一下效果:
现在我就带着大家做一遍这个demo,首先创建一个工程,在Main.storyboard里面拉到上面一个textField,这个咱们对其进行约束,如图
紧接着咱们在拉取一个UIView,并且对其进行约束:
这样约束的话,明显是有问题的,因为咱们要让其高度随着子控件的高度变化而变化,所以不能对其高度进行约束,目前只能约束view的上、左、右这三个方面,紧接着再拖上面一个imageView,给一个蓝色背景色,并对其进行约束:
接下来就是最关键的UILabel了,给其一个红色的背景色
这样对控件的约束工作就基本完成了,这样label内的文字最大宽度是父控件宽度减掉20,这样label就可以随着文字的长度而增加直到最大的宽度,黄色view的高度随着label的高度增加而增加,减小而减小,从而实现了图一的效果了,之后的工作就简单多了,拿到UILabel和UITextfield,直接上代码:
#import "ViewController.h"
@interface ViewController ()<UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UILabel *label;
@property (weak, nonatomic) IBOutlet UITextField *textField;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.textField.delegate = self;
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSString *text = [textField.text stringByReplacingCharactersInRange:range withString:string];
[UIView animateWithDuration:1.0 animations:^{
self.label.text = text;
[self.view layoutIfNeeded];
}];
return YES;
}
@end
记得[self.view layoutIfNeeded];这段代码尤为重要,没有这句代码是没有动画效果的,记得万能公式
每个约束就对应如下关系:
firstItem.firstAttribute {==,<=,>=} secondItem.secondAttribute * multiplier + constant
multiplier:即比例系数
constant:即常量
Attribute:布局属性
好了,到此今天分享结束。