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

今天讲一下关于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:布局属性

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值