2013-05-30 15 views
9

Ho bisogno di mostrare un UILabel con testo che ha due stili diversi (colori diversi, parti del testo in grassetto). Questo è risolto abbastanza facilmente utilizzando la proprietà attributeText.UILabel attribuito Testo con più modalità di interruzione di linea

Il mio problema è che il testo potrebbe non essere più lungo di quello che posso inserire nella mia etichetta. Quando si utilizza il testo normale, tutto funziona nel modo in cui lo desidero. Il testo è avvolto a parola per adattarsi al numero di linee nell'etichetta e la coda viene troncata se/quando il testo è più lungo di quello che può essere mostrato nell'etichetta.

Quando si passa a usare attributeText, sono in grado di scegliere solo tra troncamento coda e word wrapping. Se voglio che la coda venga troncata, l'etichetta esegue solo una linea con la coda troncata (anche se potrebbe contenere 10 linee). Se scelgo il word wrapping, la coda non viene troncata, ma le linee che non possono essere inserite nell'etichetta non vengono semplicemente mostrate.

La stringa di contenuto non contiene interruzioni di riga, è semplicemente una stringa lunga.

+0

Hai mai pensato di lanciare un bug ad Apple? – manicaesar

+0

Sei riuscito a risolvere questo? –

+0

vedere - https://stackoverflow.com/a/23554815/294884 e anche la risposta di ** pikachu ** qui sotto – Fattie

risposta

0

È possibile impostare uno NSParagraphStyle con qualsiasi lineBreakMode per favore e applicarlo alla stringa utilizzando NSParagraphStyleAttributeName. Non so se tutti i valori di NSLineBreakMode sono supportati, ma non ho motivo di credere che non lo siano.

+1

Ho fatto questo e ho provato ad impostare più stili su di esso ma il secondo stile è sempre stato ignorato. Questo è quello che ho provato: self.paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping | NSLineBreakByTruncatingTail; –

+0

Questi stili non sono maschere; non puoi combinarli in quel modo. –

4

L'unico modo in cui sono riuscito a farlo funzionare non è impostare uno stile di paragrafo.

8

ho perso il troncamento quando ho impostato interlinea, ma tutto quello che dovevo per aggiungere era linebreakmode a paragraphstyle

NSMutableParagraphStyle *paragrahStyle = [[NSMutableParagraphStyle alloc] init]; 
[paragrahStyle setLineSpacing:1.5]; 
[paragrahStyle setLineBreakMode:NSLineBreakByTruncatingTail]; 
NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:@"Long string that truncates"]; 
[attributedText addAttribute:NSParagraphStyleAttributeName value:paragrahStyle range:NSMakeRange(0, [attributedText length])]; 

self.label.attributedText = attributedText; 
1

provare questo:

[_text drawWithRect: _textRect opzioni: NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine attributi: attributi contesto: nil];

+0

Penso che sia così. vedi anche: https://stackoverflow.com/a/23554815/294884 è spiacevole che tu possa ottenere SOLO questo con una stringa attribuita. – Fattie

Problemi correlati