本文僅記載筆者對 YYLabel相關(guān)功能的使用和踩過的一些小坑天通。
- 基本使用
- 使用過程遇到的小問題
1.1 簡單加色修改部分字體克滴,加事件等基本使用
NSString *operateStr = @"在你使用****前逼争,請你務(wù)必審慎閱讀、充分理解《用戶協(xié)議》和《隱私政策》各條款劝赔。\n\n如你同意誓焦,請點(diǎn)擊“我知道了”開始接受我們的服務(wù)。";
NSMutableAttributedString *text = [[NSMutableAttributedString
alloc]
initWithString:operateStr];
text.yy_font = TEXT_FONT(16);
text.yy_color = HEXCOLOR(0x333333);
NSRange canTouchRange = [operateStr rangeOfString:@"《用戶協(xié)議》"];
[text yy_setTextHighlightRange:canTouchRange
color:AppBlueColor
backgroundColor:[UIColor whiteColor]
tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
// 點(diǎn)擊了第一處
}];
NSRange bCanTouchRange = [operateStr rangeOfString:@"《隱私政策》"];
[text yy_setTextHighlightRange:bCanTouchRange
color:AppBlueColor
backgroundColor:[UIColor whiteColor]
tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
// 點(diǎn)擊了第二處
}];
CGSize introSize = CGSizeMake(xxxxL.frame.size.width, CGFLOAT_MAX);
YYTextLayout *layout = [YYTextLayout layoutWithContainerSize:introSize text:text];
// 必須重新賦一次着帽,否則賦完attributed內(nèi)容會重置對齊方式為默認(rèn)
self.messageL.textAlignment = NSTextAlignmentCenter;
1.2 一段文字尾部追加“全文”“展開”“收起”“詳情”“更多”之類“按鈕”
xxxxL.truncationToken = self.truncationToken;
- (NSAttributedString *)truncationToken{
if (!_truncationToken) {
NSMutableAttributedString *endStr = [[NSMutableAttributedString alloc] initWithString:@"... 全文"];
YYTextHighlight *yyh = [YYTextHighlight new];
[yyh setColor:[UIColor greenColor]];//這個是按下的顏色
@weakify(self)
yyh.tapAction = ^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
@strongify(self)
NSLog( @"需要展開啦T游啊!仍翰!");
};
NSRange range = [endStr.string rangeOfString:@"全文"];
[endStr yy_setColor:HEXCOLOR(0x448bf2) range:range];
[endStr yy_setTextHighlight:yyh range:range];
endStr.yy_font = [UIFont systemFontOfSize:16];
YYLabel *seeMore = [YYLabel new];
seeMore.attributedText = endStr;
[seeMore sizeToFit];
self.truncationToken = [NSAttributedString yy_attachmentStringWithContent:seeMore contentMode:UIViewContentModeCenter attachmentSize:seeMore.frame.size alignToFont:endStr.yy_font alignment:(YYTextVerticalAlignmentCenter)];
}
return _truncationToken;
}
YYLabel雖然叫l(wèi)abel赫粥,然而卻是繼承至UIView,這就導(dǎo)致有些和UILabel同名的屬性不見得完全一樣的意義歉备。而我又有個命名習(xí)慣(nameL)傅是,label統(tǒng)一后綴L,后續(xù)就真把他當(dāng)做了‘label’??。
此時就textAlignment屬性就有區(qū)別了喧笔,創(chuàng)建YYLabel對象時設(shè)置為 NSTextAlignmentCenter 帽驯,而顯示時候卻還是left。如以下場景:
查找半天無果书闸,最后發(fā)現(xiàn) 在給label賦textLayout或attributedText之后需要重新賦一次對齊方式:
xxxxL.attributedText = text;
// xxxxL.textLayout = layout;
xxxxL.textAlignment = NSTextAlignmentCenter;
另外尼变,numbeOfLines屬性也有次情況,例如根據(jù)不同情況對行數(shù)進(jìn)行不同限制也要如此操作: