更改NSTextAttachment图像的大小?

我正在使用下面的代码来格式化RSS源的原始HTML到NSAttributedString 。 HTML包含<img>标签,这些标签NSTextAttachment图像作为NSTextAttachment附加到NSAttributedString 。 问题是,该图像是太大的UITextView属性string放在中。有没有一种方法,我可以在属性的string中操纵图像的大小? 下面是代表图像附件的整个属性string的摘录。

 { NSAttachment = "<NSTextAttachment: 0x16d29450> \"e0e1d483a922419807a2378a7ec031af.jpg\""; NSColor = "UIDeviceRGBColorSpace 0 0 0 1"; NSFont = "<UICTFont: 0x16ef8a40> font-family: \"Times New Roman\"; font-weight: normal; font-style: normal; font-size: 12.00pt"; NSKern = 0; NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 12, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n), DefaultTabInterval 36, Blocks (null), Lists (null), BaseWritingDirection 0, HyphenationFactor 0, TighteningFactor 0, HeaderLevel 0"; NSStrokeColor = "UIDeviceRGBColorSpace 0 0 0 1"; NSStrokeWidth = 0; } 

你可以迭代你的NSAttributedString,获取附件,边界并修改它们:

 [myAtrrString enumerateAttribute:NSAttachmentAttributeName inRange:NSMakeRange(0, myAtrrString.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) { if (![value isKindOfClass:[NSTextAttachment class]]) { return; } NSTextAttachment *attachment = (NSTextAttachment*)value; CGRect bounds = attachment.bounds; // modify bounds attachment.bounds = bounds; }]; 

这是我的解决scheme。可能会帮助别人。

 [yourSting enumerateAttribute:NSAttachmentAttributeName inRange:NSMakeRange(0, [yourSting length]) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) { if ([value isKindOfClass:[NSTextAttachment class]]) { NSTextAttachment *attachment = (NSTextAttachment *)value; UIImage *image = nil; if ([attachment image]) image = [attachment image]; else image = [attachment imageForBounds:[attachment bounds] textContainer:nil characterIndex:range.location]; CGSize size = image.size; if(size.width > kSCREEN_WIDTH - 10){ // calculate proportional height to width float ratio = image.size.width /( kSCREEN_WIDTH -10); float height = image.size.height / ratio; size = CGSizeMake(kSCREEN_WIDTH - 10, height); attachment.bounds = CGRectMake(0, 0, size.width, size.height); attachment.image = image; } } }] 

你可以设置NSTextAttachment的边界,例如(在Swift3中):

  let attachment = NSTextAttachment() attachment.image = UIImage(named: "info.png") attachment.bounds = CGRect(x: 5, y: -2, width: 15, height: 15) let attachmentString = NSAttributedString(attachment: attachment) let attributedString = NSMutableAttributedString(string: "My String") attributedString.append(attachmentString) labelText.attributedText = attributedString