Próbuję wykluczyć kwadrat w UITextView użyciu excludePaths NSTextContainer, na przykład tak:NSTextContainer exclusionPaths zawiesza się i używa 99% procesora na iOS 7.1 - obejście?
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];
Działa to dobrze w iOS 7.0:
w iOS 7.1 jednak spowoduje to nieskończoną pętlę gdzieś w lineFragmentRectForProposedRect:atIndex:writingDirection:remainingRect:
NSTextContainer, używając 99% procesora i przeciekającej pamięci jak szalony. Aplikacja całkowicie przestaje reagować i jest ostatecznie przerywana z powodu użycia pamięci. Najwyraźniej jest to błąd w iOS 7.1.
Kiedy zmienić X-pochodzenie prostokąta wykluczania tylko o jeden punkt (pochodzenie na {1,0}), to działa, ale wygląda okropnie:
błąd wydaje się zdarzyć tylko wtedy, gdy na pierwszy znak pierwszej linii wpływa wykluczenie. Kiedy zmienić rect do wykluczenia {0,30}, będzie to również działa:
Ale oczywiście nie jest to, co chcę. Czy ktoś wie, jak mogę obejść ten błąd?
Po dokładniejszym zbadaniu błąd ten wydaje się być spowodowany przez czcionkę. W moim przykładzie tutaj użyłem "HelveticaNeue-Light". Przejście do "Helvetica" rozwiązuje problem. Teraz jestem jeszcze bardziej zdezorientowany. –
Mam do czynienia z tym samym problemem. Sam zorientowałem się o punkcie początkowym, zanim zobaczyłem ten wątek. Cieszę się, że to jest powtarzalne i to nie tylko ja. To doprowadzało mnie do szału. O dziwo, używałem czcionki HelveticaNeue-Light i zmieniłem ją, ale to nie pomogło. Zmiana pochodzenia pliku exlusionPaths naprawia go, ale nie wygląda prawidłowo. – newDeveloper