2009-09-16 5 views
16

Devo misurare la larghezza dei pixel di una stringa in Cocoa Touch. Qualcuno può indicarmi un link che spiega come farlo?Misurazione della larghezza dei pixel di una stringa

+5

Non si dovrebbe chiedere una risposta generica all'obiettivo-c quando questa domanda riguarda davvero funzioni in Cocoa per Mac OS X o Cocoa Touch per iPhone OS. Objective-C è solo il linguaggio di programmazione che utilizza sia Cocoa che Cocoa Touch. – PeyloW

+4

C'è qualche altro uso dell'obiettivo-c oltre alla programmazione per Mac OS o IOS? Se è così, è significativo? –

risposta

27

Su iPhone OS è leggermente diverso, invece guarda NSString UIKit Additions Reference. L'idea è la stessa di Cocoa per Mac OS X, ma ci sono più metodi.

Per singole linee di utilizzo di testo:

- (CGSize)sizeWithFont:(UIFont *)font 
       forWidth:(CGFloat)width 
     lineBreakMode:(UILineBreakMode)lineBreakMode 

E per i testi multilinea uso:

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

L'uso di un UILineBreakMode come argomento per le singole righe di testo possono essere fonte di confusione, ma questo è perché l'interruzione di riga viene anche utilizzata per definire come troncare il testo.

+0

Questo sembra funzionare bene per i soliti tipi di carattere, ma non sembra dare i limiti esatti per i caratteri come Zapfino. Il codice di esempio è disponibile su http://paste.lisp.org/display/130803 e lo screenshot dell'output è disponibile all'indirizzo http://ScrnSht.com/juixwk. Qualche idea sul perché e come risolverlo? – trss

+0

deprecato in iOS7 .. i documenti non si riferiscono a nessuna sostituzione .. ce n'è? – abbood

+0

Gli attuali documenti iOS7 (Xcode 5.0.1) fanno riferimento a sostituzioni (che tendono ad essere solo iOS7). – JLundell

5

Dai uno sguardo allo NSString Application Kit Additions Reference, nello specifico boundingRectWithSize:options:attributes:. Il valore restituito da quella routine dovrebbe darti la larghezza del tuo NSString.

+8

La documentazione non è molto chiara su come utilizzare effettivamente 'boundingRectWithSize: options: attributes:'. Sarebbe bello se potessi aggiungere un esempio di come utilizzare effettivamente questo metodo per misurare una stringa con un font particolare. – PeyloW

0

La soluzione di cui sopra è ora obsoleta. Controllare questo per iOS 7+

sizeWithFont:constrainedToSize:lineBreakMode 

è deprecato ora. Utilizzare lo snippet di codice seguente,

UIFont *font=[UIFont fontWithName:@"Arial" size:16.f]; 

NSString *name = @"APPLE"; 

CGSize size = [name sizeWithAttributes:@{NSFontAttributeName:font}];