【发布时间】:2014-04-09 21:07:06
【问题描述】:
我已经查看了大约 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;
但是结果是这样的:
我需要怎么做才能显示两条线,并在适当的范围下划线?
另外,我不希望使用 OHAttributedLabel 或 TTTAttributedLabel 之类的第 3 方库,因为这是我的应用程序中唯一需要为一段文本添加下划线的地方。
我的尝试
- 设置属性文本后调用
sizeToFit - 改为使用 UITextView。两条线都正确渲染,但我失去了中心对齐。
- 在代码中重置
numberOfLines和lineBreakMode
Sascha 让我上传两张背景颜色设置为非清晰的屏幕截图。奇怪的是,一切都按预期显示!不知道该怎么做或这告诉我们什么。
【问题讨论】:
-
出于测试目的,为标签指定一个看似比必要更大的高度。第一行还剪掉了吗?
-
如果我在 IB 中调整高度,运行应用程序时整个标签会消失。如果我在
viewDidLoad的代码中调整标签的框架,我只会得到一行带有两个带下划线的范围。 -
所有这些奇怪的行为只有在你下划线时才会发生?
-
由于 Apple 错误(我在 SO 上看到它应该在 7.1 上修复),我建议您现在只使用 2 个单独的 UILabel,这将是最快的解决方案。我也浪费了很多时间..
-
@bilobatum,奇怪的是,如果我将属性字符串设置为不同的颜色而不是下划线,一切都会显示正常。如果一个是颜色,一个是下划线,我只看到一行文本。由于 tsafrir 的建议,也许我会只使用两个标签,或者继续使用颜色更改而不是下划线。
标签: ios objective-c uilabel nsattributedstring nsmutableattributedstring