图文混排一般都会用CoreText来实现,单对于初学者来说,却不是那么容易能够接受,所以我在这里分享一下简单的实现方法。
最终可以实现 如下的效果。
注:这里的实现并未用到CoreText, 而用到了TextKit里的NSAttributedString和NSTextAttachment
一、小试牛刀:
//1.先创建 NSMutableAttributedString,
NSMutableAttributedString * mutableAttributedStr = [[NSMutableAttributedString alloc]initWithString:@"你好吗?"];
//2.创建 NSTextAttachment
NSTextAttachment *imageAttach = [[NSTextAttachment alloc]init];
imageAttach.image = [UIImage imageNamed:@"someImage"];//这里装入你想要的图片
//3然后创建 装入NSTextAttachment的NSAttributedString
NSAttributedString *imageAttribuedString =[NSAttributedString attributedStringWithAttachment:imageAttach];
//4.最后,将装有Image的NSAttributedString 加到可变的NSMutableAttributedString
//4.1 加到文本后方
[mutableAttributedStr appendAttributedString:[NSAttributedString attributedStringWithAttachment:imageAttribuedString]]
//4.2 插到文本中间
[mutableAttributedStr insertAttributedString:imageAttribuedString atIndex:0];
二、进阶
若是图片与文字大小不一致,这时候就需要自定义NSTextAttachment
@interface TextAttachment : NSTextAttachment
@end
@implementation XZLTextAttachment
//重写父类方法,限制图片高度与文本同高
- (CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex
{
return CGRectMake( 0 , 0 , lineFrag.size.height * self.image.size.width / self.image.size.height,lineFrag.size.height );
}
@end
结束!