Change size of NSTextAttachment Image?

情到浓时终转凉″ 提交于 2019-12-01 09:40:36

问题


I am using the following code to format the raw HTML of an RSS feed into an NSAttributedString. The HTML contains <img> tags that cause the image to be attached as an NSTextAttachment into the NSAttributedString. The problem is that the image is far too large for the UITextView that the attributed string is placed in. Is there a way I can manipulate the size of the image from within the attributed string? Below is an excerpt from the whole attributed string that represents the image attachment.

{
    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;
}

回答1:


You can iterate over your NSAttributedString, get the attachments, the bounds and modify them:

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



回答2:


you can set the bounds of NSTextAttachment, for example(in 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



回答3:


Here is my solution.May be will help someone.

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


来源:https://stackoverflow.com/questions/31945236/change-size-of-nstextattachment-image

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!