2013-03-01 60 views

回答

38

此代码假定label具有所需的文本,并且其框架已被设置为所需的宽度。

- (int)lineCountForLabel:(UILabel *)label { 
    CGSize constrain = CGSizeMake(label.bounds.size.width, FLT_MAX); 
    CGSize size = [label.text sizeWithFont:label.font constrainedToSize:constrain lineBreakMode:UILineBreakModeWordWrap]; 

    return ceil(size.height/label.font.lineHeight); 
} 

更新

如果你想要的是确定基于其文字和电流宽度的标签所需的高度,然后将其更改为:

- (CGSize)sizeForLabel:(UILabel *)label { 
    CGSize constrain = CGSizeMake(label.bounds.size.width, FLT_MAX); 
    CGSize size = [label.text sizeWithFont:label.font constrainedToSize:constrain lineBreakMode:UILineBreakModeWordWrap]; 

    return size; 
} 

返回size是包含标签的正确宽度和高度。

+0

您的问题关于计算行数。你是否说你真的想要所需的身高(点数)?您写的 – rmaddy 2013-03-01 16:01:23

+0

行数等于高度除以lineHeight。我实际上想知道行数,以便为我的标签计算正确的高度,同时保持宽度不变。 – Alexis 2013-03-01 16:07:06

+0

实际上你的解决方案运作良好。谢谢! – Alexis 2013-03-01 16:09:04

4

首先使用constrainedSize

CGSize labelSize = [label.text sizeWithFont:label.font 
          constrainedToSize:label.frame.size 
           lineBreakMode:UILineBreakModeWordWrap]; 
CGFloat labelHeight = labelSize.height; 

一旦你有标签的高度,然后检查与字体大小的行数,其中fontsize是您正在使用的大小得到的标签尺寸标签的高度你标签。 e.g它可能是10或根据您的要求

CGSize sizeOfText = [label.text sizeWithFont:label.font 
         constrainedToSize:label.frame.size 
          lineBreakMode:UILineBreakModeWordWrap]; 
int numberOfLines = sizeOfText.height/label.font.pointSize; 
+0

我该如何修复宽度? – Alexis 2013-03-01 15:46:18

+0

用fontSize划分非常好,谢谢。 – 2013-11-05 20:12:37

+2

不推荐使用iOS 7 – 2015-12-31 12:17:49

-1

您可以使用sizeWithFont计算来显示字符串所需的垂直高度:constrainedToSize:方法上的NSString。 考虑到这个尺寸,您可以调整标签大小来显示整个字符串。