插入Image后,NSAttributedString意外更改了字体

时间:2014-02-12 23:43:20

标签: ios iphone ios7 textkit

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

首先,字体大小为16:

enter image description here

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

//  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];
}

但是,插入图像后,文本字体意外更改: enter image description here

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

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

问题部分得到解决,新行中的新文字字体正确,但图片旁边的文字仍然是错误:

enter image description here

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:9)

我有类似的问题。我尝试设置并向NSMutableAttributedString添加属性,但在设置UITextView's attributedText属性后,这些属性从未反映出来。文本的字体大小总是较小。

我通过在设置UITextView's属性之前将font attributedText属性存储在局部变量中,然后设置它的font属性,最终实现了此功能之后的本地变量。

答案 1 :(得分:2)

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

[newContent 
    addAttribute:NSFontAttributeName 
    value:[UIFont fontWithName:kOFontDefault size:16.0]
    range:NSMakeRange(0, newContent.length)]; 

答案 2 :(得分:1)

设置textView的输入属性属性

答案 3 :(得分:1)

这显然是一个错误。这是我找到的解决方法。插入图像后再次添加正确的字体属性将修复它。

self.contentTextView.textStorage.addAttributes(self.contentTextView.typingAttributes, range: mEditingRange)