objective-c - uilabel 中利用NSParagraphStyle设置行距问题

 Binggo89 发布于 2022-10-25 18:23

我在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, id> )attributes context:(nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 7_0);分别计算一行中文和一行英文的高度时候,发觉中文就是加了行距的,英文没加

[NSString sizeWithAttributes:]进行高度计算的时候, 也不对

显式地调用字体,不用[UIFont systemFontOfSize:]也不行

4 个回答
  • 另外,stackoverflow也有类似帖子
    http://stackoverflow.com/ques...
    暂时想到的办法是,判断uilabel显示时候是否为一行,如果是,把line-spacing置为0
    解决方案源代码地址https://github.com/673697831/...
    欢迎各位提出更好的方案或者对此方案进行修改

    2022-10-26 23:37 回答
  • NSBaselineOffsetAttributeName 设置成@0

    2022-10-26 23:37 回答
  • 请问这个问题解决了吗

    2022-10-26 23:37 回答
  • 可不可以先用NSMutableAttributedString *richtext取到label.text然后setAttributes 在将label.attributedText= richtext

    2022-10-26 23:37 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有