2009-03-04 10 views

risposta

13

Ecco un esempio specifico sulla base delle risposte fornite dal danielpunkass e Peter Hosey:

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:@"Helvetica" size:12], NSFontAttributeName, nil]; 
NSAttributedString *text = [[NSAttributedString alloc] initWithString:@"Hello" attributes: attributes]; 
NSSize textSize = [text size]; 

Per chi è nuovo a Objective-C/Cocoa come me un esempio va davvero un lungo cammino. Se provieni da C++/Java/C# o qualsiasi altra cosa la sintassi di Objective-C può sembrare davvero straniera e poiché Apple non incorpora molto se nessun codice di esempio nella loro documentazione di Cocoa, l'apprendimento di questa roba è piuttosto difficile.

+2

+ [dictionaryWithObjectsAndKeys NSDictionary:]: secondo oggetto di ogni coppia deve essere non nullo. Oppure, hai dimenticato di annullare la lista dei parametri? – Ziggy

6

Un modo è sizeWithAttributes:, come ha detto danielpunkass. L'altro modo è creare una stringa NSAttributo e chiederglielo per il suo size. L'unica differenza è che un modo ti dà un oggetto con il testo e gli attributi insieme (la stringa attribuita), mentre l'altro li tiene separati.

7

Il seguente codice è simile a quello che io uso per un testo CALayer cross-platform:

#if defined(TARGET_IPHONE_SIMULATOR) || defined(TARGET_OS_IPHONE) 
    UIFont *theFont = [UIFont fontWithName:fontName size:fontSize]; 
    CGSize textSize = [text sizeWithFont:theFont]; 
#else 
    NSFont *theFont = [NSFont fontWithName:fontName size:fontSize]; 
    CGSize textSize = NSSizeToCGSize([text sizeWithAttributes:[NSDictionary dictionaryWithObject:theFont forKey: NSFontAttributeName]]); 
#endif 

Questo vi dà un CGSize di un testo denominato NSString, con un nome di carattere di fontName e la dimensione del fontSize.

0

Se si utilizza un presentatore, ad es. UILabel/NSLabel (invece di chiedere alla stringa di disegnare se stesso). Quindi dovresti chiedere a questo oggetto la dimensione corretta.

Vedere Mike Weller's blog about labels per un'analisi dettagliata.

+2

Non c'è nessuna NSLabel. La controparte Cocoa di UILabel è NSTextField (con 'bordered' e' editable' disattivati). –

0

Ohh sotto iOS6 è possibile ottenere la giusta dimensione in questo modo:

CGSize textSize = [theString sizeWithFont:theFont 
          forWidth:160.0f 
         lineBreakMode:NSLineBreakByWordWrapping]; 
Problemi correlati