6

我在 iOS 7 中使用 Text Kit 来创建富文本编辑器。以下是问题。

首先,字体大小为 16:

在此处输入图像描述

然后我使用代码插入图像:

//  Image Attachment
NSTextAttachment *imageAttachment = [[NSTextAttachment alloc] init];
[imageAttachment setImage:image];
imageAttachment.bounds = CGRectMake(0, 0, width, height);

[self insertTextAttachment:imageAttachment];

- (void)insertTextAttachment:(NSTextAttachment*)textAttachment {
    NSMutableAttributedString *newContent = [[NSMutableAttributedString attributedStringWithAttachment:textAttachment] mutableCopy];

    NSMutableAttributedString *currentContent = [self.contentTextView.attributedText mutableCopy];
    [currentContent insertAttributedString:[[NSAttributedString alloc] initWithString:@"\n"] atIndex:mEditingRange.location];
    [currentContent insertAttributedString:[[NSAttributedString alloc] initWithString:@"\n"] atIndex:mEditingRange.location];

    mEditingRange.location++;
    [currentContent replaceCharactersInRange:mEditingRange withAttributedString:newContent];
    [currentContent setAttributes:@{NSFontAttributeName: [UIFont fontWithName:kOFontDefault size:16.0]} range:NSMakeRange(mEditingRange.location + newContent.length, 1)];
    [self.contentTextView setAttributedText:currentContent];
}

然而,插入图片后,文字字体意外改变: 在此处输入图像描述

我尝试使用以下代码来解决问题(在 insertTextAttachment: 方法中添加):

[currentContent setAttributes:@{NSFontAttributeName: [UIFont fontWithName:kOFontDefault size:16.0]} range:NSMakeRange(mEditingRange.location + newContent.length, 1)];

问题已部分修复,新行中的新文本具有正确的字体,但图像旁边的文本仍然是错误:

在此处输入图像描述

任何人都可以帮忙吗?

4

4 回答 4

11

我有一个类似的问题。我尝试为我设置和添加属性,NSMutableAttributedString而这些在设置UITextView's attributedText属性后从未反映过。文本的字体大小总是更小。

我最终通过在设置属性之前将UITextView's font属性存储在局部变量中来实现这一点attributedText,然后我将其font属性设置为局部变量。

于 2014-12-15T23:43:10.650 回答
3

这个问题也让我有些头疼。问题是您将 NSAttributedString currentContent 的范围替换为新的 NSAttributedString。但是,这会覆盖在 currentContent 上指定的所有属性,包括字体。当您在 NSTextAttachment 之后开始输入时,它会查找 newContent 的字体,但没有指定字体。因此,它使用默认字体。要修复它,您可以将此行添加到您的代码中:

[newContent 
    addAttribute:NSFontAttributeName 
    value:[UIFont fontWithName:kOFontDefault size:16.0]
    range:NSMakeRange(0, newContent.length)]; 
于 2017-01-23T13:40:43.493 回答
1

set the typing attributes property of the textView

于 2014-12-15T23:55:28.657 回答
1

This is apparently a bug. Here is a workaround I found. Adding the correct font attributes one more time after inserting image will fix it.

self.contentTextView.textStorage.addAttributes(self.contentTextView.typingAttributes, range: mEditingRange)
于 2015-11-27T14:47:59.400 回答