問(wèn)題描述
使用富文本設(shè)置行間距后凌停,當(dāng)文字內(nèi)容只顯示一行時(shí)粱年,Label 內(nèi)部顯示多余的行間距,如下圖所示:
處理前.png
初始代碼(包含行間距)代碼如下:
- (void)testBeginLabel
{
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
titleLabel.numberOfLines = 0;
titleLabel.font = [UIFont systemFontOfSize:14];;
NSString *title = @"這個(gè)是一行標(biāo)題";
CGFloat titleMaxWidth = 320; // 設(shè)置最大寬度
NSMutableAttributedString *attributedTitle = [[NSMutableAttributedString alloc] initWithString:title];
NSMutableParagraphStyle *paragraphStyleTitle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyleTitle setLineSpacing:5]; // 設(shè)置行間距
[attributedTitle addAttribute:NSParagraphStyleAttributeName
value:paragraphStyleTitle
range:NSMakeRange(0, [title length])];
[titleLabel setAttributedText:attributedTitle];
// 動(dòng)態(tài)計(jì)算UILabel 內(nèi)容顯示大小
CGSize size = [titleLabel sizeThatFits:CGSizeMake(titleMaxWidth, MAXFLOAT)];
// 設(shè)置frame
titleLabel.frame = CGRectMake(10, 10, size.width, size.height);
[self.contentView addSubview:titleLabel];
}
解決方式
第 1 步:使用 sizeToFit 方法判斷能否一行顯示
第 2 步:如果能一行顯示罚拟,就不再使用 NSMutableParagraphStyle 設(shè)置行間距台诗,否則再設(shè)置行間距
代碼處理如下:
- (void)testLabelFixed
{
UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
label.numberOfLines = 0;
label.font = [UIFont systemFontOfSize:14];
NSString *title = @"這個(gè)是一行標(biāo)題";
CGFloat titleMaxWidth = 320; // 設(shè)置最大寬度
label.text = title;
[label sizeToFit];
if (label.frame.size.width > titleMaxWidth) {
// 超過(guò)一行設(shè)置行間距
NSMutableAttributedString *attributedTitle = [[NSMutableAttributedString alloc] initWithString:title];
NSMutableParagraphStyle *paragraphStyleTitle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyleTitle setLineSpacing:5];
[attributedTitle addAttribute:NSParagraphStyleAttributeName
value:paragraphStyleTitle
range:NSMakeRange(0, [title length])];
[label setAttributedText:attributedTitle];
CGSize size = [label sizeThatFits:CGSizeMake(titleMaxWidth, MAXFLOAT)];
label.frame = CGRectMake(10, 10, size.width, size.height);
} else {
label.frame = CGRectMake(10, 10, label.frame.size.width, label.frame.size.height);
}
[self.contentView addSubview:label];
}
處理后效果如下:
處理后.png
總結(jié)
無(wú)復(fù)雜API,簡(jiǎn)單方式處理