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.1, однако, это приведет к бесконечному циклу где-то в lineFragmentRectForProposedRect:atIndex:writingDirection:remainingRect:
NSTextContainer, используя 99% ЦП и утечка памяти, как сумасшедшая. Приложение полностью не отвечает и в конечном итоге прекращается из-за использования памяти. Видимо, это ошибка в iOS 7.1.
Когда я изменяю x-origin прямоугольника исключения только на одну точку (origin на {1,0}), это работает, но выглядит ужасно:
Ошибка, по-видимому, возникает только тогда, когда прямоугольник исключения влияет на первый символ первой строки. Когда я изменю прямоугольник исключения на {0,30}, он также будет работать:
Но, очевидно, это не то, что я хочу. Кто-нибудь знает, как я могу обойти эту ошибку?
2 ответа
У меня та же проблема, чтобы исправить это я поместил:
mytextView.exclusionPaths = @[rectanglePath]
в метод layoutSubview. Я надеюсь, что это поможет кому-то
На самом деле я столкнулся с тем же самым с iOS 7 и атрибутивным текстом.
Мне пришлось полностью удалить приписанный текст, сделать UITextView доступным для выбора, чтобы я мог изменить цвет текста и шрифт, и только тогда это сработало.
Вздох.
Просто упомяну об этом на случай, если кто-нибудь наткнется на это в будущем.