繁体   English   中英

NSTextContainer exclusionPaths冻结app并在iOS 7.1上使用99%的CPU - 解决方法?

[英]NSTextContainer exclusionPaths freezes app and uses 99% CPU on iOS 7.1 - workaround?

我正在尝试使用NSTextContainer的excludePaths在UITextView中排除一个正方形,如下所示:

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: of NSTextContainer中的无限循环,使用99%的CPU并像疯狂一样泄漏内存。 该应用程序完全没有响应,最终因内存使用而终止。 显然这是iOS 7.1中的一个错误。

当我将排除矩形的x原点改变一个点(原点为{1,0})时,它可以工作,但看起来很糟糕:

使用iOS 7.1并向右指向一个点

只有当第一行的第一个字符受排除rect影响时,才会出现这个错误。 当我将排除矩形更改为{0,30}时,它也会起作用:

iOS 7.1和0,30

但显然这不是我想要的。 有谁知道如何解决这个bug?

我有同样的问题,解决这个我放置:

mytextView.exclusionPaths = @[rectanglePath] 

进入layoutSubview方法。 我希望这会对某人有所帮助

实际上我在iOS 7和属性Text上遇到了同样的问题。

我必须完全删除属性文本,使UITextView可选择,以便我可以更改文本颜色和字体,然后它才有效。

叹。

只要提到这个,万一有人在将来偶然发现这件事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM