2013-03-01 1 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

+0

と書いてあります。行数は、高さをlineHeightで割ったものに等しくなります。私は実際に、幅を固定したままラベルの正しい高さを計算するために線の数を知りたがっていました。 – Alexis

+0

実際にはあなたのソリューションはうまくいきます。ありがとう! – Alexis

4

まず、ラベルの高さを持っていたら、その後fontsizeはあなたのために使用されているサイズでフォントサイズと行数を確認しconstrainedSize

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

を使用してラベルサイズからラベルの高さを取得しますラベル。 NSStringのに方法:constrainedToSize:例えば、それはあなたがsizeWithFontを使用して文字列を表示するために必要な垂直方向の高さを計算することができ、あなたの要件

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

どのように幅を修正できますか? – Alexis

+0

fontSizeで割ることは素晴らしいです、ありがとう。 –

+2

iOS 7で廃止されました –

-1

に10かによってである可能性があります。 サイズを指定すると、ラベルのサイズを変更して文字列全体を表示できます。