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