做APP的過(guò)程中經(jīng)常有類(lèi)似于這樣的需求:
最開(kāi)始的時(shí)候我是采取的一個(gè)
UIImageView
加上一個(gè)UILable
的方式實(shí)現(xiàn)的 ,簡(jiǎn)單快捷。但是這么做的問(wèn)題也很明顯喇完,四個(gè)控件枕荞,你就要做四次布局。這種方法的弊端在產(chǎn)品要求修改布局是尤為明顯造烁。而且這種方法是無(wú)法實(shí)現(xiàn)下面的這種需求的:
可以說(shuō)否过,要實(shí)現(xiàn)這種樣式,github上有很多很好的三方類(lèi)可以實(shí)現(xiàn)惭蟋,但是其實(shí)利用UILable
的attributedText
屬性和系統(tǒng)的NSMutableAttributedString
類(lèi)苗桂,不到10行代碼就可以實(shí)現(xiàn)。
上代碼:
- (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
用哪一個(gè)告组,看個(gè)人口味了煤伟。
補(bǔ)充:iOS7以及以上版本支持。