NSTextContainer exclusionPaths замораживает приложение и использует 99% ЦП на iOS 7.1 - обходной путь?

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

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:

с iOS 7.0

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

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

с iOS 7.1 и одной точкой вправо

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

iOS 7.1 и 0,30

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

2 ответа

Решение

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

mytextView.exclusionPaths = @[rectanglePath] 

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

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

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

Вздох.

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

Другие вопросы по тегам