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