将排除path添加到多个文本视图

我试图添加多个排除path到一系列的UITextView ,在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上排除path的设置。 例如,如果我没有设置排除path,它工作正常。 重要的是,如果我只在第一个NSTextContainer上设置排除path,那么一切正常 – 但超过一个,应用程序冻结。 我做错了什么,或者这是一个错误?

我想回想起来,这是显而易见的,但是我得到的解决scheme是在分配容器之后但执行其他任何操作之前,为每个新的NSTextContainer添加排除path。 即

 NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:columnSize]; textContainer.exclusionPaths = @[exclusionPath]; [manager addTextContainer: textContainer]; 

而不是:

 NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:columnSize]; [manager addTextContainer: textContainer]; textContainer.exclusionPaths = @[exclusionPath]; 

这会导致应用程序无响应。

很简单,当你知道如何。 这只适用于多列,多页面布局,在这些布局中,您要创build多个文本容器和视图,并将字形分解为适当的字体。 如果您只是将一个排除path添加到一个视图,看起来好像您可以在任何地方添加排除path。

这对RichText中的ImageWrapping非常简单且有帮助。 但一个人应该记住的东西。 前一天我试了这个,发现iOS 7.0和iOS 7.1的代码工作方式不同

TextView的闪烁光标出现在不同的地方,直到UITextView中没有文本。

我写了这个代码。

 UIBezierPath* exclusionPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 38, 21)]; _txtViewMessage.textContainer.exclusionPaths = @[exclusionPath]; 

并发现以下结果在iOS 7.1和iOS 7.0

左一:iOS 7.0和右一:iOS 7.1