如果更改基线偏移属性,则UILabel属性文本不能有多行

时间:2016-05-06 10:09:34

标签: ios objective-c iphone uilabel nsattributedstring

我想在单词中更改括号的基线偏移量,例如" [推荐] blablabla"。

NSRange range = [text rangeOfString:@"[推]"];
if (range.location == 0) {
    [text addAttribute:NSBaselineOffsetAttributeName value:@(0.5) range:NSMakeRange(0, 1)];
    [text addAttribute:NSBaselineOffsetAttributeName value:@(0.5) range:NSMakeRange(range.length-1, 1)];
}

但标签的第二行消失并被截断。有人有想法吗?

4 个答案:

答案 0 :(得分:2)

请使用lineBreakMode和numberOfLines 也可以调用sizeToFit,如下所示:

label.lineBreakMode = UILineBreakModeWordWrap;
label.numberOfLines = 0;
[label sizeToFit]; 

将自动计算高度。

由于

答案 1 :(得分:0)

如果您使用情节提要,请参阅下面的图像,选择标签,然后看到行设置为0和换行符设置Word Wrap解决。

enter image description here

或者如果您使用代码,

目标C:

LabelName.lineBreakMode = UILineBreakModeWordWrap;
LabelName.numberOfLines = 0;

夫特:

LabelName.lineBreakMode = .ByWordWrapping
LabelName.numberOfLines = 0 

希望它有用

答案 2 :(得分:0)

您是否尝试使用NSMutableParagraphStyle将lineBreakMode设置为属性?

NSMutableParagraphStyle *paragrahStyle = [[NSMutableParagraphStyle alloc] init];
[paragrahStyle setLineBreakMode:NSLineBreakByTruncatingTail];

[attributedText addAttribute:NSParagraphStyleAttributeName value:paragrahStyle range:NSMakeRange(0, [attributedText length])];

像这里提出的那样:UILabel attributedText with multiple line break modes

答案 3 :(得分:0)

我做了一些快速测试,似乎如果你在字符串的第一个处添加一个空格,它将按预期工作

// make sure your text looks like @" [推]your content"
if (range.location == 1) {
    [text addAttribute:NSBaselineOffsetAttributeName value:@(0.5) range:NSMakeRange(1, 1)];
    [text addAttribute:NSBaselineOffsetAttributeName value:@(0.5) range:NSMakeRange(range.length, 1)];
}