我使用以下代码将RSS提要的原始HTML格式化为NSAttributedString
。 HTML包含<img>
个标记,可将图像作为NSTextAttachment
附加到NSAttributedString
中。问题是图像对于放置属性字符串的UITextView而言太大了。有没有办法可以在属性字符串中操纵图像的大小?以下是代表图像附件的整个属性字符串的摘录。
{
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;
}
答案 0 :(得分:6)
您可以迭代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;
}];
答案 1 :(得分:1)
你可以设置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
答案 2 :(得分:0)
这是我的解决方案。可能会帮助某人。
[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;
}
}
}]
&#13;