2014-09-19 14 views
14

Sembra su iOS 8.0 (12A365) NSMutableAttributedString a volte non verrà visualizzato correttamente. Il problema si verifica ovviamente quando l'intervallo dell'attributo non inizia all'inizio del testo (e se non vi sono altri attributi che iniziano all'inizio del testo). !Visualizzazione NSMutableAttributedString su iOS 8

Così con 1.) la seconda parola "verde" non mostrerà lo sfondo verde (bug) ("cella" è una UITableViewCell con UILabel "etichetta" come una visualizzazione secondaria):

1.)

text = [[NSMutableAttributedString alloc] initWithString:@"Green is green. (-> Bug)"]; 
[text addAttribute:NSBackgroundColorAttributeName value:[UIColor greenColor] range:(NSRange){9,5}]; 
cell.label.attributedText=text 

Con 2.) e 3.) gli sfondi vengono visualizzati correttamente:

2.)

text = [[NSMutableAttributedString alloc] initWithString:@"Green is green. (-> Ok)"]; 
[text addAttribute:NSBackgroundColorAttributeName value:[UIColor greenColor] range:(NSRange){0,5}]; 
[text addAttribute:NSBackgroundColorAttributeName value:[UIColor greenColor] range:(NSRange){9,5}]; 
cell.label.attributedText=text 

3.)

text = [[NSMutableAttributedString alloc] initWithString:@"Green is green. (-> Ok)"]; 
[text addAttribute:NSBackgroundColorAttributeName value:[UIColor greenColor] range:(NSRange){0,5}]; 
cell.label.attributedText=text 

Trova screenshot e XCode 6 Progetto qui: Screenshot and XCode 6 Project

Sembra per me come un bug in iOS 8 - in modo da un rapporto continua ad Apple.

+0

ho b anche vedere questo con il tentativo di sottolineare una porzione di etichetta. Questa è una regressione davvero fastidiosa. –

+1

@Darcy: Grazie per il tuo commento. Puoi provare ad aggiungere un altro attributo dummy (come lo sfondo colorato chiaro ...) a (NSRange) {0,1} - per me questa è una soluzione alternativa per 1.) come menzionato sopra. –

+0

Hai inviato una segnalazione di bug ad Apple? Sto correndo nello stesso identico problema qui. – MrBr

risposta

0

Sto riscontrando problemi simili con NSAttributedString e l'attributo NSLinkAttributeName in iOS 8. In particolare, uno che inizia all'inizio della stringa (ad esempio "www.cnn.com") viene visualizzato come previsto (utilizzando drawWithRect: opzioni :contesto:). Tuttavia, se aggiungiamo il collegamento oltre il primo carattere (ad esempio "testo www.cnn.com") il collegamento non viene visualizzato come blu o sottolineato, nonostante gli attributi siano corretti. Queste stringhe di solito hanno attributi che abbracciano l'intera stringa e ciò non sembra avere importanza, forse perché gli attributi "stringa intera" vengono aggiunti dopo gli attributi NSLink. Ho provato a scambiare l'ordine in modo che i collegamenti vengano aggiunti dopo altri attributi, ma ciò non risolve il problema.

L'unica soluzione che ho capito finora è quello di ri-attributo i legami con una sottolineatura, dopo aver aggiunto gli attributi che si applicano per l'intera stringa, in questo modo:

 [_attributedDisplayValue enumerateAttribute:NSLinkAttributeName 
              inRange:displayValueRange 
              options:0 
             usingBlock:^(id value, NSRange range, BOOL *stop) { 
              [_attributedDisplayValue addAttribute:NSUnderlineColorAttributeName 
                      value:[UIColor blueColor] 
                      range:range]; 
             }]; 
+0

Grazie per la risposta! Il tuo workaround mi sembra simile o uguale a quello descritto nel mio commento a Darcy. Brutte notizie, comunque, in iOS 8.0.2 il problema è ancora lì ... –

9

Prova questa, prima applicare un NSBackgroundColorAttributeName in più in tutta l'etichetta con un colore trasparente

text = [[NSMutableAttributedString alloc] initWithString:@"Green is green. (-> Bug)"]; 
[text addAttribute:NSBackgroundColorAttributeName value:[UIColor clearColor] range:(NSRange){0,text.length}]; //Fix 
[text addAttribute:NSBackgroundColorAttributeName value:[UIColor greenColor] range:(NSRange){9,5}]; 
cell.label.attributedText=text 
+2

Questa è una correzione e dovrebbe essere almeno considerata la risposta corretta – MrBr

+1

Aveva lo stesso problema in iOS8 dove il testo barrato non veniva mostrato a metà gamme. Questo risolto - 10x. bug dovrebbe essere segnalato a Apple. – AmitP

Problemi correlati