iOS 来自未知文本长度的动态标签框架

示例

有时,我们必须根据未知文本长度的动态内容来调整UILabel的大小。在此示例中,UILabel的宽度固定为280个点,而高度则是无限的,比方说为9999。根据文本样式和maximumLabelSize估算框架。

目标C

UILabel * label = [[UILabel alloc] init];

NSString *message = @"Some dynamic text for label";

//设置文本和样式(如果有)。
label.text = message;

label.numberOfLines = 0;

CGSize maximumLabelSize = CGSizeMake(280, 9999); //280:最大标签宽度和9999-最大标签高度。

// 使用UILabel中的字体信息来计算大小
CGSize expectedLabelSize = [label sizeThatFits:maximumLabelSize];

//在iOS 7.0中已弃用
//CGSize ExpectedLabelSize = [message sizeWithFont:label.font constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByWordWrapping];

// 创建一个填充有UILabel框架数据的框架
CGRect newFrame = label.frame;

// 将框架调整为计算的大小
newFrame.size.height = expectedLabelSize.height;

// 将计算出的框架放入UILabel框架
label.frame = newFrame;

迅速

var message: String = "Some dynamic text for label"
//设置文本和样式(如果有)。
label.text = message
label.numberOfLines = 0
var maximumLabelSize: CGSize = CGSize(width: 280, height: 9999)
var expectedLabelSize: CGSize = label.sizeThatFits(maximumLabelSize)
// 创建一个填充有UILabel框架数据的框架
var newFrame: CGRect = label.frame
// 将框架调整为计算的大小
newFrame.size.height = expectedLabelSize.height
// 将计算出的框架放入UILabel框架
label.frame = newFrame