2013-09-27 6 views
6

Ho aggiornato di recente la mia app su iOS 7 utilizzando XCode 5 e ho scoperto che boundingRectWithSize fornisce altezze diverse (nella parte di dimensioni) che calcolano i limiti delle stringhe attribuite.NSAttributoString boundingRectWithSize fornisce diverse altezze tra iOS 6 e iOS 7

La seguente riga mi dà risultati diversi tra iOS 6 e iOS 7:.

CGRect rect = [self boundingRectWithSize:CGSizeMake(inWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil]; 

"sé" è un NSAttributedString e "inWidth" è la larghezza massima in pixel la stringa dovrebbe andare bene in

Penso che iOS 7 abbia una gestione dei font diversa da iOS 6.

Chiunque ha una soluzione funzionante per calcolare l'altezza di una stringa su entrambe le versioni di iOS?

+0

Forse questo link dovrebbe aiutare http://stackoverflow.com/questions/19028743/ios7-uitextview-contentsize-height-alternative/19067476#19067476 – rajdurai

risposta

1

Ho avuto lo stesso problema, per me un semplice ceil() in altezza risolto. Assicurati anche di impostare gli attributi giusti per la tua stringa attribuita, ad es.

@{NSParagraphStyleAttributeName: paragraphStyle, NSFontAttributeName : label.font} 
+0

Questo è anche nella funzione-documentazione: In iOS 7 e versioni successive, questo metodo restituisce dimensioni frazionarie (nel componente di dimensione del CGRect restituito); per utilizzare una vista restituita in dimensioni, è necessario utilizzare il suo valore al numero intero più vicino più vicino utilizzando la funzione ceil. Ma: in iOS 6 ho ricevuto per es. 18 e con iOS 7 ottengo 16.799999 - quindi un ceil() mi dà 17. E questo è solo per una singola riga di testo, con il testo multilinea diventa ancora peggio. – Heiko

7

Come non possiamo usare sizeWithAttributes per tutti i maggiori di iOS 4.3 che dobbiamo scrivere codice condizionale per 7.0 e precedenti iOS. Quindi suggerisco di utilizzare data soluzione

UILabel *gettingSizeLabel = [[UILabel alloc] init]; 
gettingSizeLabel.font = [UIFont fontWithName:[AppHandlers zHandler].fontName size:16]; 
gettingSizeLabel.text = @"YOUR TEXT HERE"; 
gettingSizeLabel.numberOfLines = 0; 
CGSize maximumLabelSize = CGSizeMake(310, 9999); // this width will be as per your requirement 

CGSize expectedSize = [gettingSizeLabel sizeThatFits:maximumLabelSize]; 

L'opzione è abbastanza bene e lavorare senza problemi in tutte le iOS senza codice condizionale.