多线UILabel上的NSAttributedString切断第一线

dji*_*i33 6 objective-c nsattributedstring uilabel ios nsmutableattributedstring

我已经看了大约10个关于SO的问题,而且我仍然很短.

我有一个多行UILabel(在Interface Builder中创建,numberOfLines设置为0),它通常像这样呈现:

在此输入图像描述

我想强调"服务条款"和"隐私政策",所以我添加了以下代码:

NSString *text = self.agreement.text;
NSMutableAttributedString *aString = [[NSMutableAttributedString alloc] initWithString:text];

NSRange privacyRange = [text rangeOfString:@"privacy policy" options:NSCaseInsensitiveSearch];
[aString addAttribute:NSUnderlineStyleAttributeName value:@(NSUnderlineStyleSingle) range:privacyRange];

NSRange tosRange = [text rangeOfString:@"terms of service" options:NSCaseInsensitiveSearch];
[aString addAttribute:NSUnderlineStyleAttributeName value:@(NSUnderlineStyleSingle) range:tosRange];

self.agreement.attributedText = aString;
Run Code Online (Sandbox Code Playgroud)

但结果如下:

在此输入图像描述

我需要做什么才能显示这两行,并用适当的范围加下划线?

此外,我不想使用像OHAttributedLabel或TTTAttributedLabel这样的第三方库,因为这是我的应用中唯一需要为一段文字加下划线的地方.

我试过的

  • sizeToFit设置属性文本后调用
  • 改为使用UITextView.两条线都正确渲染但我丢失了中心对齐方式.
  • 重置numberOfLineslineBreakMode代码

Sascha让我上传了两个截图,背景颜色设置为清除之外的其他颜色.奇怪的是,一切都按预期显示!不知道该怎么做或这告诉我们什么.

在此输入图像描述

dji*_*i33 0

所以昨天,根据 tsafrir 的评论(iOS 7 bug,应该在 7.1 中修复),我将这两行分成两个标签并继续。

然后,SashaHameister 建议我看看当我应用不清晰的背景颜色时会发生什么。因此,我删除了顶部标签,将文本添加到第二个标签中,使其成为两行,更改背景颜色,并且两行都呈现良好。我认为这就是解决方案(尽管它行不通,因为我需要一个清晰的背景)。

之后,我尝试将其改回清除,它仍然对我有用。事实证明,这与我的标签尺寸有关。我的两行标签的高度约为 75,远远超出了 11 磅字体的两行标签所需的高度。由于我昨天所做的调整(将线条分成两个标签),当我将第一个标签的文本复制并粘贴到第二个标签时,高度最终仅为 48px,并且渲染得很好。

我仍然不知道为什么这会产生如此大的影响,但如果您遇到同样的问题,很可能您的标签高度比需要的要大。尝试尽可能减少它并尽可能紧贴实际文本。