2009-12-27 11 views
6

Sto cercando di ottenere un NSString suddiviso in linee per adattarsi alla larghezza desiderata (come accadrebbe all'interno di sizeWithFont:constrainedToSize:). C'è un modo migliore per fare questo di indovinare dove sarebbero avvenute le interruzioni in sizeWithFont?Rompere NSString in linee (per adattarsi alla larghezza desiderata)

+0

Potresti entrare un po 'più in dettaglio sul motivo per cui hai bisogno delle linee separate? Se vuoi solo disegnare la corda in uno spazio dato, questo è abbastanza semplice. –

+0

Sto creando uno sfondo - come quello che si ottiene selezionando il testo - per un'etichetta. La sua larghezza varia per ogni linea (con una lunghezza diversa), quindi ne avrò bisogno separatamente. – Pyetras

risposta

2

Se NSLayoutManager non è effettivamente disponibile, è possibile che si rimanga una soluzione più inefficiente: a partire dalla prima parola della stringa, aggiungendo ogni parola successiva e utilizzando il metodo sizeWithFont: (ecc.) Sulla stringa risultante. Quando l'altezza delle modifiche restituite è CGSize, la parola aggiunta più di recente è stata quella che ha causato l'interruzione di riga e quindi è possibile dividere la stringa lì.

+0

Ecco cosa ho concluso con – Pyetras

1

Aggiornamento: Questo apparentemente si applica solo sulla piattaforma Mac. Anche se NSLayoutManager fa esplicitamente riferimento alla Guida al disegno per archi di iPhone (a partire da dicembre 2009), né esso né NSAttributo sono disponibili sulla piattaforma iPhone. Ci scusiamo per il rumore.

risposta originale

NSLayoutManager è tuo amico, se stai cercando di dividere la stringa stessa in linee di una certa larghezza, con una serie di attributi (ad esempio, è necessario conoscere i luoghi reali dove è avvolta la stringa).

Se si sta solo cercando di avvolgere le linee quando disegno e non si cura, dove, (AppKit integrazioni) i metodi di NSAttributedString -drawInRect: o -drawWithRect:options: farà bene.

+1

Né NSLayoutManager né NSAttributedString sono disponibili su iPhone. –

+1

Non ho intenzione di disegnare le linee (immediatamente), quindi né le aggiunte NSAttributedString né NSString + UIKit aiuteranno. – Pyetras

+0

Ole: confuso. NSLayoutManager fa esplicitamente riferimento alla String Programming Guide nella libreria iPhone Dev Center: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/Strings/Articles/DrawingStrings.html –

1

Aggiornamento: Sulla base del commento qui sotto (è possibile disegnare la stringa, ma non è possibile disegnare uno sfondo per coprire la stringa), penso che la soluzione migliore sarebbe quella di utilizzare un UIWebView e utilizzare CSS per disegnare il tuo sfondo.


Il NSString UIKit Additions potrebbe soddisfare le vostre esigenze, in particolare

- (CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font 
     lineBreakMode:(UILineBreakMode)lineBreakMode; 

e/o

- (CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font 
     lineBreakMode:(UILineBreakMode)lineBreakMode 
      alignment:(UITextAlignment)alignment; 
+0

Controlla i commenti sulla domanda e la risposta di Joshua qui sotto: disegnare le linee non è il problema. In realtà ha bisogno di sapere dove sono le interruzioni di riga, allo scopo di disegnare uno sfondo che si estende solo alla fine di ogni riga. –

1

NSLayoutManager è disponibile in quanto iOS 7. La documentazione è here.

Problemi correlati