首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用属性"firstLineHeadIndent“的attributedString在UILabel中不能正确显示

使用属性"firstLineHeadIndent“的attributedString在UILabel中不能正确显示
EN

Stack Overflow用户
提问于 2017-04-20 13:00:47
回答 3查看 659关注 0票数 0

我试图在UILabel中显示一个attributedString,并将"firstLineHeadIndent“属性添加到它的属性中。

16个字符的"国",应该分成两行。但是UILabel只在一行中显示了14个字符,如图片“16个字符不正确”所示。

当使用17 characters.Can时,它可以正确显示,谁能告诉我为什么??下面是我的代码:

代码语言:javascript
运行
复制
  - (void)viewDidLoad {
    [super viewDidLoad];

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(15, 0, 300, 80)];
    label.numberOfLines = 0;
    label.lineBreakMode = NSLineBreakByWordWrapping;
    [self.view addSubview: label];

    NSMutableParagraphStyle *paraStyle = [NSMutableParagraphStyle new];
    paraStyle.firstLineHeadIndent = 40;
    paraStyle.lineBreakMode = NSLineBreakByWordWrapping;
    NSDictionary *attrs = @{
                            NSParagraphStyleAttributeName:paraStyle,
                            NSFontAttributeName:[UIFont systemFontOfSize:17 weight:UIFontWeightBold],
                            NSKernAttributeName:@.9f
                            };
    label.attributedText = [[NSAttributedString alloc] initWithString:@"国国国国国国国国国国国国国国国国" attributes:attrs];}

16个字符不正确:

正确显示17个字符:

EN

回答 3

Stack Overflow用户

发布于 2017-04-20 13:05:33

已更新答案

将此行更改为:

代码语言:javascript
运行
复制
   UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(15, 0, 300, 80)];
    label.numberOfLines = 0;
    label.lineBreakMode = NSLineBreakByCharWrapping;
    label.adjustsFontSizeToFitWidth=YES;
    label.backgroundColor=[UIColor redColor];
    label.textAlignment=NSTextAlignmentLeft;
    [self.view addSubview: label];

    NSMutableParagraphStyle *paraStyle = [NSMutableParagraphStyle new];
    paraStyle.firstLineHeadIndent = 20;
    paraStyle.lineBreakMode = NSLineBreakByWordWrapping;
    NSDictionary *attrs = @{
                            NSParagraphStyleAttributeName:paraStyle,
                            NSFontAttributeName:[UIFont systemFontOfSize:16 weight:UIFontWeightBold],
                            NSKernAttributeName:@.9f
                            };
    label.attributedText = [[NSAttributedString alloc] initWithString:@"国国国国国国国国国国国国国国国国" attributes:attrs];

解决方案2 :

删除段落:事物

代码语言:javascript
运行
复制
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(15, 0, 300, 80)];
    label.numberOfLines = 0;

 label.text=@"国国国国国国国国国国国国国国国国国国";
    label.lineBreakMode = NSLineBreakByWordWrapping;
    label.adjustsFontSizeToFitWidth=YES;
    label.backgroundColor=[UIColor redColor];
    label.textAlignment=NSTextAlignmentCenter;
    [self.view addSubview: label];
票数 0
EN

Stack Overflow用户

发布于 2020-05-21 15:47:48

我也遇到了这个问题,我认为这是UILabel的一个bug。所以我试着把它改成UITextView,它起作用了。

票数 0
EN

Stack Overflow用户

发布于 2020-09-02 10:45:49

我认为你可以使用透明图像的NSTextAttachment来增加额外的空间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43510585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档