文本尾部添加小图片

需求点

经常会有小伙伴遇到这样的需求:无论文字多长,一定要在文字的最后添加一个小图片

笔者当初遇到这个需求的时候废了好大力气算出了文字的里最后一个字的rect,也就是位置,然后在右面硬生生加上了一个UIImage。结果后来到适配的时候很麻烦。其实实现方案很简单:使用NSAtrributedString!

实现步骤:

  1. 将文字的NSString转化为NSMutableAttributedString
  2. 创建一个图片的NSTextAttachment
  3. NSMutableAttributedStringNSTextAttachment拼接得到新的NSMutableAttributedString
  4. 将新的NSMutableAttributedString赋给UILabelattributedText属性即可。

代码实现:


- (NSAttributedString *)attatchImage: (UIImage *)image atLastOfString: (NSString *)string
{
    //1.现将内容string转化为NSMutableAttributedString
    NSMutableAttributedString *attributedMString = [[NSMutableAttributedString alloc] initWithString:string];    

    //2.获取图片的NSTextAttachment
    NSTextAttachment *attach = [[NSTextAttachment alloc] init];
    attach.image = image;  

    //在这里如果不设置attatchment的bounds,就有可能造成添加的图片的位置高于文字或者大小与文字的大小不统一的情况。不过还是具体问题具体分析,在这里只是告诉各位图片的rect是可以更改的
    attach.bounds = CGRectMake(2, -2, 15, 15);    

    //3.将图片的NSTextAttachment转化为imageString
    NSAttributedString *imageString = [NSAttributedString attributedStringWithAttachment:attach];
   
    //4.合并NSMutableAttributedString和imageString
    [attributedMString appendAttributedString:imageString];
    
    //5. 将NSMutableAttributedString转化为NSAttributedString并返回
    return [[NSAttributedString alloc] initWithAttributedString:attributedMString];

}

作为对比,笔者分别创建了单行和多行的UILabel,但是为了不使代码重复,单独写了一个方法来获得在末尾添加了图片的NSAttributedString,而且通过这个方法,完全不用考虑屏幕适配或者最后一个字在当前行末尾的情况,因为NSAttributedString会帮我们做好的。

效果图:

文字末尾添加小图片

如此简单高效的方法真是相见恨晚有木有!



作者:J_Knight_
链接:https://www.jianshu.com/p/fcf6d9b88749
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值