我想将NSTextAttachment图像附加到我的属性字符串并使其垂直居中.
我使用以下代码来创建我的字符串
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:DDLocalizedString(@"title.upcomingHotspots") attributes:attrs];
NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.image = [[UIImage imageNamed:@"help.png"] imageScaledToFitSize:CGSizeMake(14.f, 14.f)];
cell.textLabel.attributedText = [str copy];
Run Code Online (Sandbox Code Playgroud)
但是,图像看起来与单元格textLabel的顶部对齐.

如何更改绘制附件的矩形?
这是我的问题:
我使用Core Data来存储来自iOS和/或OS X应用程序的富文本输入,并希望将图像粘贴到NSTextView或UITextView中,以便:a)保留其原始分辨率,b)在显示屏上进行缩放以正确调整textView,这意味着根据设备上视图的大小进行缩放.
目前我正在使用- (void)textStorage:(NSTextStorage *)textStorage didProcessEditing:(NSTextStorageEditActions)editedMask range:(NSRange)editedRange changeInLength:(NSInteger)delta查找附件,然后生成具有比例因子的图像并将其分配给textAttachment.image属性.
这样做是因为我只是改变了比例因子并保留了原始图像,但我相信更优雅的解决方案是使用NSTextAttachmentContainer子类并从中返回一个适当大小的CGREct
- (CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何创建和插入这样的子类?
我是否使用textStorage:didProcessEditing迭代每个附件并将NSTextAttachmentContainer替换为我自己的类,或者我可以简单地创建一个Category,然后以某种方式使用此类别来更改默认行为.后者似乎不那么具有侵入性,但如何让我的textViews自动使用这个类别呢?
糟糕:刚刚注意到NSTextAttachmentContainer是一个协议,所以我假设然后在NSTextAttachment上创建一个类别,并覆盖上面的方法是一个选项.
嗯:不能使用Category来覆盖现有的类方法,所以我想子类化是唯一的选择,在这种情况下如何让UITextView使用我的附件子类,或者我必须迭代使用referencedString来替换所有NSTextAttachments MYTextAttachment的实例.将此字符串取消归档到OS X上会产生什么影响,比如默认的OS X NSTextAttachment(与iOS类不同)?