iOS-UILabel根据文本、字体大小计算label宽度;以及自适应高度

本文详细介绍如何在iOS开发中获取并使用不同字体,包括单行和多行文本的自动布局实现方法。针对UILabel,提供了具体的代码示例,展示了如何通过sizeWithAttributes和boundingRectWithSize方法计算文本的实际尺寸。

下载地址  GitHub源码 或者 Demo下载

想获得所有字体,如下:

//获取到所有的字体名称
    NSArray *familyNames = [UIFont familyNames];
    NSLog(@"所有字体名称--%@",familyNames);

 

一、单行文本

对于单行文本来说,直接使用sizeWithAttributes方法,如下:

- (void)viewDidLoad {
    [super viewDidLoad];
    //获取到所有的字体名称
    NSArray *familyNames = [UIFont familyNames];
    NSLog(@"所有字体名称--%@",familyNames);
    UILabel *lbl_text = [[UILabel alloc]init];
    lbl_text.backgroundColor = [UIColor greenColor];
    lbl_text.text = @"我们是一家人";
    // 设置Label的字体 HelveticaNeue  Courier
    UIFont *fnt = [UIFont fontWithName:@"Courier New" size:24.0f];
    lbl_text.font = fnt;
    // 根据字体得到NSString的尺寸
    CGSize size = [lbl_text.text sizeWithAttributes:[NSDictionary dictionaryWithObjectsAndKeys:fnt,NSFontAttributeName,nil]];
    // 名字的H
    CGFloat nameH = size.height;
    // 名字的W
    CGFloat nameW = size.width;
    lbl_text.frame = CGRectMake(100,100, nameW,nameH);
    [self.view addSubview:lbl_text];
}

如图:

 

二、多行文本

首先UILabel的numberOfLines设置为0,其次通过- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context方法来计算CGSize,具体代码如下

- (void)viewDidLoad {
    [super viewDidLoad];
    //获取到所有的字体名称
    NSArray *familyNames = [UIFont familyNames];
    NSLog(@"所有字体名称--%@",familyNames);
    [self setMultiLine];
}

- (void)setMultiLine
{
    UILabel *lbl_text = [UILabel new];
    lbl_text.font = [UIFont systemFontOfSize:14];
    lbl_text.text = @"文字在语言学中指书面语的视觉形式,古代把独体字叫做“文”,把合体字叫做“字”,如今联合起来叫做“文字”,文字的基本个体叫做“字”。在日常生活中,“文字”还可以指书面语、语言、文章、字等。视觉符号形式,突破口语的时间和空间限制。例如汉字、拉丁字母。";
    lbl_text.backgroundColor = [UIColor greenColor];
    lbl_text.numberOfLines = 0;//多行显示,计算高度
    lbl_text.textColor = [UIColor lightGrayColor];
    CGSize lblSize = [lbl_text.text boundingRectWithSize:CGSizeMake([UIScreen mainScreen].bounds.size.width - 20, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14]} context:nil].size;
    lbl_text.frame = CGRectMake(10, 100, lblSize.width, lblSize.height);
    [self.view addSubview:lbl_text];
}

如图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值