2013-03-01 29 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。 考慮到這個尺寸,您可以調整標籤大小來顯示整個字符串。