2014-09-01 11 views
6

Ich versuche, einige zufälligen Text in eine UILabel anzuzeigen und natürlich habe ich nichts außer seiner Breite. Gibt es eine Möglichkeit, meine UILabel Höhe und/oder Anzahl der Zeilen abhängig von dem darin enthaltenen Text?Set UILabel die Anzahl der Zeilen abhängig von dem enthaltenen Text - Objective C und/oder Swift

Dank;)

+0

Warum verwenden Sie nicht 0 für die Anzahl der Zeilen? – Larme

+0

Vielleicht kann Ihnen das [Tutorial] (http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout) helfen - es geht um Tabellenzellen mit dynamischer Höhe, aber ich denke, Sie können transponiere das Konzept in das, was du tust. Es ist hilfreich, wenn Sie sich mit Auto-Layout befassen – Antonio

+0

kann es für Sie hilfreich sein: - http://stackoverflow.com/questions/9181368/ios-dynamic-sizing-labels –

Antwort

6
myUILabel.numberOfLines = 0; 
myUILabel.text = @"Pass random text here"; 
[myUILabel sizeToFit]; 
+1

Danke für die Info. Es ist wirklich einfach, weshalb ich gewählt habe. Bitte schreiben Sie beschreibender und die konkrete Antwort für die Frage, die das heigh ist. myUILabel.frame.size.height – Goppinath

+1

und Sie müssen erwähnen, dass die Anweisung [myUILabel sizeToFit]; muss der letzte sein. – Goppinath

+0

Dies sollte die akzeptierte Antwort sein! Danke Kumpel! –

4

Oder (wenn Sie die Höhe des Etiketts für eine bestimmte Breite und Schriftgröße benötigen, können Sie es mit dieser Berechnung):

func getStringHeight(mytext: String, fontSize: CGFloat, width: CGFloat)->CGFloat { 

    let font = UIFont.systemFontOfSize(fontSize) 
    let size = CGSizeMake(width,CGFloat.max) 
    let paragraphStyle = NSMutableParagraphStyle() 
    paragraphStyle.lineBreakMode = .ByWordWrapping; 
    let attributes = [NSFontAttributeName:font, 
     NSParagraphStyleAttributeName:paragraphStyle.copy()] 

    let text = mytext as NSString 
    let rect = text.boundingRectWithSize(size, options:.UsesLineFragmentOrigin, attributes: attributes, context:nil) 
    return rect.size.height 
} 

Sie diese brauchen für Swift oder für Objective C?

1

können Sie verwenden NSString UIKIT Addition Methode

- (CGSize)sizeWithFont:(UIFont *)font 
    constrainedToSize:(CGSize)size 
     lineBreakMode:(NSLineBreakMode)lineBreakMode 

die Höhe zu berechnen. etwas wie.

CGSize yourLabelSize = [@"Your very long text" sizeWithFont:yourFont constrainedToSize:CGSizeMake(desiredMaximumWidth, 2000) lineBreakMode:NSLineBreakByWordWrapping]; 

ist es wirklich wichtig, die constrainedToSize Parameter zu verstehen. Sie müssen eine CGSize mit desired maximum Breite und maximum possible height übergeben. Verwenden Sie das gleiche mit Ihrem Etikett. Vergessen Sie nicht, die

[yourLabel setNumberOfLines:0]; 

Aber die Methode ist bereits veraltet in iOS 7 deshalb haben Sie einstellen verwenden

- (CGRect)boundingRectWithSize:(CGSize)size 
         options:(NSStringDrawingOptions)options 
        attributes:(NSDictionary *)attributes 
         context:(NSStringDrawingContext *)context 

yourLabelSize.height geben Sie die Höhe

es hoffen, wird Ihnen helfen, ...

1

Für Swift 4.0

func getStringHeight(mytext: String, fontSize: CGFloat, width: CGFloat)->CGFloat { 

    let font = UIFont.systemFont(ofSize: fontSize) 
    let size = CGSize(width: width, height: CGFloat.greatestFiniteMagnitude) 
    let paragraphStyle = NSMutableParagraphStyle() 
    paragraphStyle.lineBreakMode = .byWordWrapping; 
    let attributes = [NSAttributedStringKey.font:font, 
         NSAttributedStringKey.paragraphStyle:paragraphStyle.copy()] 

    let text = mytext as NSString 
    let rect = text.boundingRect(with: size, 
           options:.usesLineFragmentOrigin, 
           attributes: attributes, 
           context:nil) 
    return rect.size.height 
}