将排除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