首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSTextContainer exclusionPaths冻结应用程序并在iOS 7.1上使用99%的CPU -解决方案?

NSTextContainer exclusionPaths冻结应用程序并在iOS 7.1上使用99%的CPU -解决方案?
EN

Stack Overflow用户
提问于 2014-05-08 12:53:01
回答 2查看 1K关注 0票数 10

我试图使用NSTextContainer的excludePaths排除excludePaths中的正方形,如下所示:

代码语言:javascript
复制
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}时,它也将工作:

但很明显这不是我想要的。有人知道我怎么对付这个虫子吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-09 15:08:26

我也有同样的问题,为了解决这个问题,我把:

代码语言:javascript
复制
mytextView.exclusionPaths = @[rectanglePath] 

转化为layoutSubview方法。我希望这能帮到别人

票数 3
EN

Stack Overflow用户

发布于 2015-02-20 12:10:26

实际上,我在iOS 7和一个属性化的文本中遇到了同样的情况。

我必须完全删除属性化文本,使UITextView可选,以便我可以改变文本的颜色和字体,只有这样,它才能工作。

叹一口气。

我只是提一下,以防将来有人发现这件事。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23542316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档