问题描述
我在uilabel中设置富文本 是为了调整行距 调用如下
NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];paragraphStyle.lineSpacing = klineSpacing;NSAttributedString *str = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@'%@%@%@', str0, str1, str2] attributes:@ { NSFontAttributeName: [UIFont systemFontOfSize:15], NSParagraphStyleAttributeName: paragraphStyle,}];
label.attributedText = mutableAttStr; //之前已经设置以下代码// [messageLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical|UILayoutConstraintAxisHorizontal];然后我发觉 只有一行中文的时候 底下会留空白(其实是lineSpacing高度)
当字数大于两行时候 底下又没有空白(没有了行距)
为何会出现这种情况 要怎么设置啊亲
另外,我用- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary<NSString , id> )attributes context:(nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 7_0);分别计算一行中文和一行英文的高度时候,发觉中文就是加了行距的,英文没加
[NSString sizeWithAttributes:]进行高度计算的时候, 也不对
显式地调用字体,不用[UIFont systemFontOfSize:]也不行
问题解答
回答1:可不可以先用NSMutableAttributedString *richtext取到label.text然后setAttributes 在将label.attributedText= richtext
回答2:请问这个问题解决了吗
回答3:NSBaselineOffsetAttributeName 设置成@0
回答4:另外,stackoverflow也有类似帖子http://stackoverflow.com/ques...暂时想到的办法是,判断uilabel显示时候是否为一行,如果是,把line-spacing置为0解决方案源代码地址https://github.com/673697831/...欢迎各位提出更好的方案或者对此方案进行修改