我正在尝试将多个排除路径添加到一系列UITextView
s 依次布置在UIScrollView
,像这样:
while (lastRenderedGlyph < self.manager.numberOfGlyphs) {
CGRect textViewFrame = CGRectMake(currentXOffset, 10,
width / 2,
height - 20);
CGSize columnSize = CGSizeMake(CGRectGetWidth(textViewFrame) - 20,
CGRectGetHeight(textViewFrame) - 10);
NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:columnSize];
[self.manager addTextContainer:textContainer];
UITextView *textView = [[UITextView alloc] initWithFrame:textViewFrame
textContainer:textContainer];
textView.scrollEnabled = NO;
textView.editable = NO;
textView.dataDetectorTypes = UIDataDetectorTypeAll;
textView.delegate = self;
textView.selectable = YES;
UIImageView *goat = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"goat"]];
[goat setContentMode:UIViewContentModeScaleAspectFit];
goat.frame = CGRectMake(0.0, 0.0, 50.0, 50.0);
[textView addSubview:goat];
[self.scrollView addSubview:textView];
textView.textContainer.exclusionPaths = @[[UIBezierPath bezierPathWithRect:CGRectMake(0.0, 0.0, 50.0, 50.0)]];
currentXOffset += CGRectGetWidth(textViewFrame);
lastRenderedGlyph = NSMaxRange([self.manager glyphRangeForTextContainer:textContainer]);
}
但是,这会导致应用程序冻结,我已将问题追溯到每个应用程序上的排除路径的设置NSTextContainer
。例如,如果我没有设置排除路径,它就可以正常工作。重要的是,如果我只在第一个上设置排除路径NSTextContainer
,然后一切正常 - 但任何超过一个,应用程序就会冻结。我做错了什么,或者这是一个错误?
我想回想起来,这是显而易见的,但我得出的解决方案是为每个新的添加排除路径NSTextContainer
分配容器后立即但是before做任何其他事情。 IE。
NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:columnSize];
textContainer.exclusionPaths = @[exclusionPath];
[manager addTextContainer: textContainer];
而不是:
NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:columnSize];
[manager addTextContainer: textContainer];
textContainer.exclusionPaths = @[exclusionPath];
这会导致应用程序变得无响应。
当你知道怎么做时就很简单。这仅适用于多列、多页面布局,您在其中创建多个文本容器和视图并分解字形以正确适应。如果您只向一个视图添加一条排除路径,似乎您可以在任何地方添加排除路径。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)