设置UILabel可变高度(根据文本内容自动适应高度)

本文介绍了一种计算UILabel自适应高度的方法,适用于不同iOS版本。通过调整字体大小和约束宽度来计算文本所需的高度,并据此更新UILabel的高度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@property(nonatomic)UILabel *showLabel;
 
 // 计算文本所占高度,计算出来之后设置label的高度

 // 第一个参数:字体大小,字体大小/样式影响计算字体的高度
 // 第二个参数:CGSize结构体,结构体中第一个参数表示宽度,宽度的设置影响计算文本的高度,很明显越宽,高度越小;结构体中第二个参数表示最大能有多高,比如我们写为100,那么即使文本高度计算出来是200, 这个方法也会返回100, 所以一般情况下我们把它写为MAXFLOAT, 表示能有多高返回多高
    if ([[[UIDevice currentDevice] systemVersion] floatValue] <= 7.0) {
        CGSize size = [str sizeWithFont:self.showLabel.font           constrainedToSize:CGSizeMake(self.showLabel.frame.size.width, MAXFLOAT)];
        // 计算出文本高度后,重新给label赋值
        CGRect frame = self.showLabel.frame;
        frame.size.height = size.height;
        self.showLabel.frame = frame;
    } else {
        /*
         // 计算text的高度,改变label的高,让label适应这些文字
         CGSize textSize = [text sizeWithFont:[UIFont systemFontOfSize:18.0] constrainedToSize:CGSizeMake(self.targetLabel.frame.size.width, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping];
         // 第一个参数:字体
         // 第二个参数:constraintedSize
         // 第三个参数:换行模式
         */
        // after iOS7: boundingRectWithSize:options:attributes:context:
        CGSize textSize = [str boundingRectWithSize:CGSizeMake(self.showLabel.frame.size.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:17.0]} context:nil].size;
        // 选项options:
        /**
         * NSStringDrawingUsesLineFragmentOrigin:
         绘制文本时使用 line fragement origin 而不是 baseline origin
         NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading | NSStringDrawingTruncatesLastVisibleLine
         * NSStringDrawingUsesFontLeading:
         计算行高时使用行距。(译者注:字体大小+行间距=行距)
         * NSStringDrawingTruncatesLastVisibleLine:
         如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。
         * NSStringDrawingUsesDeviceMetrics:
         计算布局时使用图元字形(而不是印刷字体)。
         */
        CGRect frame = self.showLabel.frame;
        frame.size.height = textSize.height;
        self.showLabel.frame = frame;
    }
    self.showLabel.text = @"xxxxxxx";//你的文本内容
【拓】同理可以设计一个可变高度(根据内容自适应高度)的 UITableViewCell

 

1) 创建并添加一个 UILabel 作为单元格 cell 的子视图;
2) 在 UITableView 的委托方法: (CGFloat)tableView:(UITableView*)tableViewheightForRowAtIndexPath: (NSIndexPath *) indexPath 中计算高度
3) 在 UITableView 的委托方法: (UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexP ath: (NSIndexPath *) indexPath 中计算 UILabel 的框大小。

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值