获取UILabel中的行数

时间:2015-04-22 04:48:25

标签: objective-c uilabel

对于同一个问题的许多旧解决方案都已弃用(UILineWordWrap,命名一个已弃用的解决方案)。我还发现其中一些不可靠。那么,在IOS 8中,我应该如何找到uilabel中的行数?

1 个答案:

答案 0 :(得分:5)

iOS8 开始,您可以使用[NSString boundingRectWithSize:options:attributes]来获取给定字符串的高度。

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineBreakMode = label.lineBreakMode;
NSDictionary *attributes = @{NSFontAttributeName: label.font, NSParagraphStyleAttributeName: paragraphStyle.copy};
NSInteger options = NSStringDrawingUsesLineFragmentOrigin;

CGRect rect = [self boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) options:options attributes:attributes context:nil];
NSInteger numberOfLines = floor(ceilf(rect.size.height) / label.font.lineHeight);

作为替代方法;如果您已经设置了标签的宽度,也可以使用[UILabel: sizeToFit]方法,如下所示:

label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
[label sizeToFit];
NSInteger numberOfLines = floor(ceilf(CGRectGetHeight(label.frame)) / label.font.lineHeight);