2009-09-06 11 views
6

Immaginate un UILabel, che è largo 200 pixel e alto 50 pixel. L'etichetta contiene del testo all'interno e l'etichetta riduce il testo in modo che si adatti all'etichetta. Ma ora, come otterresti la dimensione di quell'UIFont come è visibile nell'etichetta? Immaginiamo che la dimensione del font sia stata data con 100 enormi, e che l'etichetta la comprima fino a 15. E poi, vuoi fare altre etichette con poco testo, che ha la stessa dimensione del font. C'è un modo per ottenere la dimensione del font di UIFont dopo essere stato schiacciato dall'etichetta?Come calcolare la dimensione di un UIFont quando il testo nell'etichetta è vincolato per adattarsi alla larghezza?

risposta

15

Se si passa la dimensione del UILabel e la breakMode, ecc per:

CGSize size = [label.text sizeWithFont:label.font minFontSize:10 actualFontSize:&actualFontSize forWidth:200 lineBreakMode:UILineBreakModeTailTruncation]; 

actualFontSize dovrebbe essere quello che stai cercando.

UPDATE:

Quanto sopra è stato sconsigliato. Il metodo da utilizzare ora è:

- (CGRect)textRectForBounds:(CGRect)bounds 
    limitedToNumberOfLines:(NSInteger)numberOfLines 

Ecco un esempio

CGSize size = [label textRectForBounds:label.bounds 
    limitedToNumberOfLines:1].size; 
+0

Quindi actualFontSize sarebbe una CGSize che passo con riferimento a tale metodo? –

+0

Sì. In C e Obj C, una funzione è limitata nel modo in cui può restituire valori. Gli argomenti passati a una funzione vengono valutati e il loro valore viene inserito nello stack, prima che venga chiamata la funzione. La funzione ottiene solo quei valori e non può trasmettere un valore di ritorno in essi. A meno che ciò che viene premuto non sia un puntatore, nel qual caso la funzione può usare il puntatore per scrivere sul suo indirizzo e modificarlo. Sto semplificando eccessivamente - qui actualFontSize è uno dei valori restituiti della funzione (metodo). – mahboudz

+0

Questo è obsoleto in iOS7. C'è una sostituzione iOS8? –

Problemi correlati