2014-05-08 5 views
10

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:

with 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:

with iOS 7.1 and one point to the right

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:

iOS 7.1 and 0,30

Ale oczywiście nie jest to, co chcę. Czy ktoś wie, jak mogę obejść ten błąd?

+1

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. –

+0

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

Odpowiedz

3

Mam ten sam problem, aby rozwiązać ten problem i umieszczone:

mytextView.exclusionPaths = @[rectanglePath] 

do layoutSubview metoda. Mam nadzieję, że to pomoże komuś

+0

To wydaje się działać :) –

+0

Miło mi to słyszeć :) – Mourad

0

Właściwie to spotkałem to samo z iOS 7 i przypisanym tekstem.

Musiałem całkowicie usunąć przypisany tekst, ustawić UITextView do wybrania, dzięki czemu mogę zmienić kolor tekstu i czcionkę i tylko wtedy zadziałało.

Westchnienie.

Wystarczy wspomnieć o tym na wypadek, gdyby ktoś natknął się na to w przyszłości.

Powiązane problemy