ios - 向多个 TextView 添加排除路径

标签 ios uiscrollview uitextview textkit

我正在尝试向 UITextView 中连续布局的一系列 UITextView 添加多个排除路径,如下所示:

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 添加排除路径, 执行任何操作之前别的。即

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

而不是:

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

这会导致应用变得无响应。

当你知道怎么做时就很简单了。这仅适用于多列、多页面布局,在这些布局中,您正在创建多个文本容器和 View ,并分解字形以使其适合。如果您只向一个 View 添加一个排除路径,似乎您可以在任何地方添加排除路径。

关于ios - 向多个 TextView 添加排除路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20085919/

相关文章:

ios - 带有旋转表面的 OpenGL ES 2.0 工件

ios - Jenkins 生成的 ipa 无法在 iPhone 上安装(iOS 9 + XCode 7.1)

iphone - UIScrollView 将触摸发送到 subview

ios - 带有 @tags 的 UITextView 和视觉效果背后的隐藏信息

iphone - UitextView 中的文本被截断?如何正确地逐页滚动文本

iphone - 如何正确地将 UIImageView 放置在 UITableViewCell 内?

swift - 使用 UIScrollView 和自动布局的图像 slider

iphone - 为 UIScrollView 实现自定义缩放

iphone - iOS字体:如何在iOS中显示科普特字体

ios - 更新和编辑 CoreData 中的实体