欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于UILabel的autolayout用法——子控件决定父控件的高度

程序员文章站 2022-06-08 16:31:25
...
今天讲一下关于UILable的autolayout的用法,这个控件有点特殊,就是如果你不做设置,只是在UILable上面设置文字内容,会发现文字内容并不能填充整个UILable,如图:
关于UILabel的autolayout用法——子控件决定父控件的高度
如果出现这种情况就会很尴尬了,那么我们今天就讲一下如何让文字填充整个label。我们现在有一个需求就是让父控件随着子控件的高度增加而增加,减小而减小,大家请先看一下效果:
关于UILabel的autolayout用法——子控件决定父控件的高度
现在我就带着大家做一遍这个demo,首先创建一个工程,在Main.storyboard里面拉到上面一个textField,这个咱们对其进行约束,如图
关于UILabel的autolayout用法——子控件决定父控件的高度
紧接着咱们在拉取一个UIView,并且对其进行约束:
关于UILabel的autolayout用法——子控件决定父控件的高度
这样约束的话,明显是有问题的,因为咱们要让其高度随着子控件的高度变化而变化,所以不能对其高度进行约束,目前只能约束view的上、左、右这三个方面,紧接着再拖上面一个imageView,给一个蓝色背景色,并对其进行约束:
关于UILabel的autolayout用法——子控件决定父控件的高度
接下来就是最关键的UILabel了,给其一个红色的背景色
关于UILabel的autolayout用法——子控件决定父控件的高度
这样对控件的约束工作就基本完成了,这样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:布局属性

好了,到此今天分享结束。