2014-09-01 13 views
6

Sto tentando di visualizzare il testo casuale in un UILabel e ovviamente non ho altro che la sua larghezza. C'è un modo per impostare l'altezza del mio UILabele/o il numero di linee a seconda del testo in esso contenuto?Imposta il numero di linee di UILabel in base al testo contenuto - Obiettivo C e/o Swift

Grazie;)

+0

Perché non usi 0 per il numero di linee? – Larme

+0

Forse questo [tutorial] (http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout) può aiutarti - si tratta di celle di tabella con altezza dinamica, ma penso che tu possa trasporre il concetto in qualunque cosa tu stia facendo. È utile se hai a che fare con il layout automatico – Antonio

+0

potrebbe essere utile per te: - http://stackoverflow.com/questions/9181368/ios-dynamic-sizing-labels –

risposta

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

Grazie per le informazioni. È davvero facile questo perché ho votato. Si prega di scrivere più descrittivo e la risposta concreta per la domanda che è l'altezza. myUILabel.frame.size.height – Goppinath

+1

e devi menzionare la frase [myUILabel sizeToFit]; deve essere l'ultimo – Goppinath

+0

Questa dovrebbe essere la risposta accettata! Grazie compagno! –

4

Oppure (se avete bisogno l'altezza dell'etichetta per una larghezza e il carattere di dimensione specifica, è possibile calcolare con questo):

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 
} 

Hai bisogno di questo per Swift o per Objective C?

1

È possibile utilizzare il metodo NSString UIKIT Addition

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

per calcolare l'altezza. qualcosa di simile a.

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

è davvero importante capire il parametro constrainedToSize. Devi passare uno CGSize con larghezza desired maximum e maximum possible height. Usa lo stesso UIFont con la tua etichetta. Non dimenticate di impostare il

[yourLabel setNumberOfLines:0]; 

Ma il metodo è già deprecato in iOS 7 quindi è necessario utilizzare

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

yourLabelSize.height vi darà l'altezza

spero che vi aiuterà a ...

1

Per 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 
}