2011-11-19 18 views
18

私はuilabelと特別なアライメントを行う必要があります。uilabelの最大行数を設定します

私は、それが持っている内容を問わず、1行から3行を必要とします。 は現在、私はそれをテキストが長すぎるではない場合、この素晴らしい作品

label.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:14.0f]; 
label.backgroundColor = [UIColor clearColor]; 
label.numberOfLines = 0; 
label.lineBreakMode = UILineBreakModeWordWrap; 

label.frame = CGRectMake(114.0f, 88.0f, 187.0f, 0.0f); 
[label sizeToFit]; 

のようなものをやっています。文字列が@"Hello World"のようなものであれば、UILabelの長さは14ポイントに過ぎません。

今、私はテキストが3行の長さが長すぎる場合は、デフォルトの...トリプルドットを追加する必要がありますが、上の設定では4行目に拡大します。

誰もがこれを達成する方法を持っていますか?

不明な点がある場合は、コメントを残してください。

編集:
check out this sample application to view my problem (hopefully).

答えて

18
label.numberOfLines = 3; 
CGSize size = [label.text sizeWithFont:label.font 
        constrainedToSize:CGSizeMake(SOME_WIDTH, 
                3 * label.font.lineHeight) 
         lineBreakMode:UILineBreakModeWordWrap]; 
label.bounds = CGRectMake(0, 0, 
          size.width, 
          size.height); 
+0

は期待どおりに動作します。枠をフレームに変更し、ラインブレーキモードを変更しました。 からカテゴリを作りました。チェックアウト:https://github.com/martinjuhasz/UILabel-maximumNumberOfLines – choise

+0

「UILineBreakModeWordWrap」は推奨されていません。代わりに 'NSLineBreakByWordWrapping'を使用してください。 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/nsparagraphstyle_Class/Reference/Reference.html – Chiubaka

13

ちょうどlabel.numberOfLines = 3;を設定します。

表示する線の最大量を実際に保持しているので、表示が多少間違っています。

+0

うん、とゼロは、それが常に3行ではありませんので、numberOfLinesがゼロでない場合、sizeToFitは動作しませんし、私はsizeToFitの動作を必要とする – NJones

+0

「好きなだけを使用する」という意味しますそれが必要ない場合は高い。 – choise

+0

あなたの質問に間違いがありました。ごめんなさい – Gil

0

getStringSizeを呼び出します。これはタイプStringSizeの変数を返し、動的に行数を決定します。

struct StringSize { 

    int numberOfLine; 
    float height; 
    float width; 

}; 

typedef struct StringSize StringSize; 



+(StringSize)getStringSize:(NSString *)string ofWidth:(float)width FontSize:(id)font { 

    StringSize sizeForString; 

    if(string){ 
     CGSize size = CGSizeMake(width, 400.0f); 
     CGSize appStringSize = [string sizeWithFont:(UIFont *)font constrainedToSize:size  lineBreakMode:UILineBreakModeTailTruncation]; 
     CGSize sizeString = [string sizeWithFont:font];  

     sizeForString.width = appStringSize.width; 
     sizeForString.height = appStringSize.height; 
     sizeForString.numberOfLine = (int)(sizeForString.height/sizeString.height); 
    }else { 
     sizeForString.width = 0; 
     sizeForString.height = 0; 
     sizeForString.numberOfLine = 0; 
    } 

    return sizeForString; 
} 
2

私はそれを試してみるだろうと思った:

func heightForStringDrawing(myString: String, myFont:UIFont, myWidth:CGFloat) -> (CGFloat, Int) { 
    var tc = NSTextContainer(size: CGSize(width: myWidth, height:CGFloat(FLT_MAX))) 
    var ts = NSTextStorage(string: myString) 
    var lm = NSLayoutManager() 
    lm.addTextContainer(tc) 
    ts.addLayoutManager(lm) 
    ts.addAttribute(NSFontAttributeName, value: myFont, range: NSMakeRange(0, ts.length)) 
    tc.lineFragmentPadding = 0.0 
    lm.glyphRangeForTextContainer(tc) 
    let height = lm.usedRectForTextContainer(tc).height 
    let lines = Int(Float(height/myFont.lineHeight)) 
    return (height, lines) 
} 

コメントは確かに歓迎されています!私はからこれを採用した: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/TextLayout/Tasks/StringHeight.html

+0

ああ...私はこれが彼の質問には具体的に答えないかもしれないことを認識しています。それが誰にでも役立つことがあります。 –

関連する問題