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:
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:
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:
Ma ovviamente questo non è quello che voglio. Qualcuno sa come posso aggirare questo bug?
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. –
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