Исключение NSTextContainerPaths замораживает приложение и использует 99% процессор на iOS 7.1 - обходной путь?

Я пытаюсь исключить квадрат в UITextView, используя NSTextContainer excludePaths, например:

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];

Это отлично работает в iOS 7.0:

with iOS 7.0

В iOS 7.1, однако, это приведет к бесконечному циклу где-то в lineFragmentRectForProposedRect:atIndex:writingDirection:remainingRect: NSTextContainer, используя 99% процессор и утечку памяти, как сумасшедший. Приложение полностью не отвечает и в конечном итоге прекращено из-за использования памяти. По-видимому, это ошибка в iOS 7.1.

Когда я изменяю x-origin прямоугольника исключения только на одну точку (начало до {1,0}), он работает, но выглядит ужасно:

with iOS 7.1 and one point to the right

Ошибка только возникает, когда первый символ первой строки зависит от исключения rect. Когда я изменю исключение rect на {0,30}, он также будет работать:

iOS 7.1 and 0,30

Но, очевидно, это не то, что я хочу. Кто-нибудь знает, как я могу обойти эту ошибку?

Ответ 1

У меня такая же проблема, чтобы исправить это:

mytextView.exclusionPaths = @[rectanglePath] 

в метод layoutSubview. Надеюсь, это поможет кому-то.

Ответ 2

На самом деле я столкнулся с тем же самым с iOS 7 и атрибутом Text.

Мне пришлось полностью удалить атрибутный текст, сделать UITextView доступным, чтобы я мог изменять цвет и шрифт текста, и только тогда он работал.

Вздох.

Просто упомянем об этом, если кто-то наткнется на это в будущем.