我想调整UIImageView的大小,使其恰好位于一行结束的位置,并且恰好位于UITextView中一行开头的位置。
情境: 我是使用NSURLConnection从URL下载图像的。然后,我使用ImageIO框架调整图像大小以适应屏幕。最后,我向UITextView.textContainer添加了排除路径,以便文本环绕图像。
问题: 我之前不知道图像的大小,所以我必须调整它以适应。除了图片有时与一条线重叠之外,一切都很有效。
问题: 我如何确保图像的大小,使其恰好适合一行结束的位置和一行开始的正上方?
示例:
正如您在上面的示例中所看到的,图像下方的文字不再显示在行上。我以为我可以从UIImageView和lineHeight的高度得到剩余部分但是,我不知道该怎么做。
前。 (int)imageView.bounds.size.height % (int)self.textView.font.lineHeight
非常感谢任何指导!
P.S。如果我的问题不清楚,请告诉我,我会尝试进一步解释。
答案 0 :(得分:1)
感谢@CarstenWitzke,我得到了它的工作。我使用了带有NSTextAttachment的NSArributedString。然后,我得到图像高度的剩余部分除以textView.font.lineHeight并从textView.font.lineHeight中减去,然后将差异添加到图像的高度。唯一的问题是调整图像大小以适应新的界限。
<强>实施例强>
UIImage * scaledImage = [UIImage imageWithCGImage:imageRef scale:2 orientation:UIImageOrientationUp];
NSTextAttachment * textAttachment = [[NSTextAttachment alloc] init];
textAttachment.image = scaledImage;
int remainder = (int)scaledImage.size.height % (int)floor(self.textView.font.lineHeight);
CGFloat difference = (self.textView.font.lineHeight - remainder);
textAttachment.bounds = CGRectMake(0, 0, scaledImage.size.width, scaledImage.size.height + difference);
NSMutableAttributedString * attributedStringWithImage = [[NSAttributedString attributedStringWithAttachment:textAttachment] mutableCopy];
NSAttributedString * newLineAttributedString = [[NSAttributedString alloc] initWithString:@"\n"];
[self.textView.textStorage appendAttributedString:newLineAttributedString];
[self.textView.textStorage appendAttributedString:attributedStringWithImage];
[self.textView.textStorage appendAttributedString:newLineAttributedString];
修改强>
事实证明我可以使用CoreGraphics框架来填充图像,这样就无需调整图像大小以适应新的界限。
<强>实施例强>
- (UIImage *)image:(UIImage *)image padding:(CGSize)padding
{
CGSize size = CGSizeMake(image.size.width + padding.width, image.size.height + padding.height);
UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);
CGFloat x = (image.size.width + padding.width) - image.size.width;
CGFloat y = (image.size.height + padding.height) - image.size.height;
CGPoint origin = CGPointMake(x, y);
[image drawAtPoint:origin];
UIGraphicsPopContext();
UIImage * paddedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return paddedImage;
}