2014-05-08 6 views
10

Sto cercando di escludere un quadrato in un UITextView utilizzando excludePaths di NSTextContainer, in questo modo:NSTextContainer exclusionPaths blocca l'app e utilizza CPU al 99% su iOS 7.1 - soluzione alternativa?

NSTextStorage* textStorage = [[NSTextStorage alloc] initWithAttributedString:attributedString]; 
NSLayoutManager *layoutManager = [NSLayoutManager new]; 
[textStorage addLayoutManager:layoutManager]; 

NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:self.bounds.size]; 

UIBezierPath *rectanglePath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 250, 250)]; 
textContainer.exclusionPaths = @[rectanglePath]; 

[layoutManager addTextContainer:textContainer]; 

self.textView = [[UITextView alloc] initWithFrame:self.bounds textContainer:textContainer]; 
self.textView.editable = NO; 
self.textView.scrollEnabled = NO; 
[self addSubview:self.textView]; 

Questo funziona bene in iOS 7.0:

with iOS 7.0

In iOS 7.1 tuttavia, ciò causerà un loop infinito da qualche parte in lineFragmentRectForProposedRect:atIndex:writingDirection:remainingRect: di NSTextContainer, utilizzando CPU al 99% e perdite di memoria come un matto. L'app non risponde completamente e alla fine viene interrotta a causa dell'uso della memoria. Apparentemente questo è un bug in iOS 7.1.

quando cambio la x-origine del rettangolo di esclusione per un solo punto (origine per {1,0}), funziona, ma sembra terribile:

with iOS 7.1 and one point to the right

Il solo il bug sembra accadere quando il primo carattere della prima riga è influenzato dal rect di esclusione. Quando cambio il rettangolo di esclusione a {0,30}, sarà anche funzionare:

iOS 7.1 and 0,30

Ma ovviamente questo non è quello che voglio. Qualcuno sa come posso aggirare questo bug?

+1

Dopo ulteriori indagini questo errore sembra essere causato dal tipo di carattere. Nel mio esempio qui stavo usando "HelveticaNeue-Light". Passare a "Helvetica" risolve il problema. Ora sono ancora più confuso. –

+0

Sto affrontando lo stesso problema. Ho scoperto il trucco del punto di origine prima di vedere questo thread. Mi fa piacere che questo sia riproducibile e non sono solo io. Mi stava facendo impazzire. Stranamente, stavo usando il font HelveticaNeue-Light e l'ho cambiato, ma questo non mi ha aiutato. La modifica dell'origine di exlusionPaths la corregge ma non sembra corretta. – newDeveloper

risposta

3

Ho lo stesso problema, per risolvere questo problema ho messo:

mytextView.exclusionPaths = @[rectanglePath] 

in layoutSubview metodo. Spero che questo possa aiutare qualcuno

+0

Sembra funzionare :) –

+0

Piacere di sentirlo :) – Mourad

0

In realtà ho riscontrato la stessa cosa con iOS 7 e un testo attribuito.

Ho dovuto rimuovere completamente il testo attribuito, rendere selezionabile UITextView in modo da poter cambiare il colore del testo e il carattere e solo allora ha funzionato.

Sigh.

Basta citare questo nel caso in cui qualcuno si imbatta in questo in futuro.

Problemi correlati