做APP的过程中经常有类似于这样的需求:
最开始的时候我是采取的一个
UIImageView
加上一个UILable
的方式实现的 ,简单快捷。但是这么做的问题也很明显,四个控件,你就要做四次布局。这种方法的弊端在产品要求修改布局是尤为明显。而且这种方法是无法实现下面的这种需求的:
可以说,要实现这种样式,github上有很多很好的三方类可以实现,但是其实利用UILable
的attributedText
属性和系统的NSMutableAttributedString
类,不到10行代码就可以实现。
上代码:
- (NSMutableAttributedString *)getAttributeStringWithText:(NSString *)textStr withEmoji:(NSString *)emojiStr
{
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:textStr];
NSTextAttachment *emoji = [[NSTextAttachment alloc] init];
emoji.image = [UIImage imageNamed:emojiStr];
emoji.bounds = CGRectMake(0, 0, 10, 10);
NSAttributedString *attachString = [NSAttributedString attributedStringWithAttachment:emoji];
[attributedStr appendAttributedString:attachString];
return attributedStr;
}
_songName.attributedText = [self getAttributeStringWithText:songNameStr withEmoji:@"try_listen"];
[A appendAttributedString:B];//在A后面拼接上B
[B insertAttributedString A atIndex:0];//在B前面插入A
用哪一个,看个人口味了。
补充:iOS7以及以上版本支持。