我试图使用NSTextContainer的excludePaths排除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: of NSTextContainer中的无限循环,使用99%的CPU,并且会疯狂地泄漏内存。该应用程序完全没有响应,最终由于内存的使用而终止。显然,这是iOS 7.1中的一个bug。
当我将排除矩形的x原点更改为一个点(原点为{1,0})时,它可以工作,但看起来很糟糕:

错误似乎只有在第一行的第一个字符受到排除rect影响时才会发生。当我将排除改为{0,30}时,它也将工作:

但很明显这不是我想要的。有人知道我怎么对付这个虫子吗?
发布于 2015-01-09 15:08:26
我也有同样的问题,为了解决这个问题,我把:
mytextView.exclusionPaths = @[rectanglePath] 转化为layoutSubview方法。我希望这能帮到别人
发布于 2015-02-20 12:10:26
实际上,我在iOS 7和一个属性化的文本中遇到了同样的情况。
我必须完全删除属性化文本,使UITextView可选,以便我可以改变文本的颜色和字体,只有这样,它才能工作。
叹一口气。
我只是提一下,以防将来有人发现这件事。
https://stackoverflow.com/questions/23542316
复制相似问题