带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName

Posted

技术标签:

【中文标题】带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName【英文标题】:UILabel with multiple chained NSAttributedString, with line limit, show the tail truncation with NSBackgroundColorAttributeName of unseen text 【发布时间】:2016-01-05 15:46:12 【问题描述】:

点是由UILabel自动添加的,导致行限制,但它们获得了隐藏截断文本的背景颜色:

所以我有 UILabel,行数限制为 10,换行模式为 TruncateTail。 我还有 2 种类型的属性字符串来构建这个 UILabel 内容。

    NSForegroundColorAttributeName、NSFontAttributeName NSBackgroundColorAttributeName、NSForegroundColorAttributeName、NSFontAttributeName

知道为什么 UILabel 会为点添加背景颜色吗?第 12 行(被截断)中有具有该背景的文本...

【问题讨论】:

您能添加 NSAttributedString 代码吗?会帮助我理解:) 截断文本中是否存在“Windsor”字符串的实例? 是的,截断的文本中有一个 Winsor 的实例。 【参考方案1】:

=这里给定代码试试看..

NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:@"test"];

NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];

style.lineBreakMode = NSLineBreakByTruncatingTail;

[文本 addAttribute:NSParagraphStyleAttributeName 价值:风格 range:NSMakeRange(0, text.length)];

label.attributedText = 文本;

【讨论】:

【参考方案2】:

看起来您的 NSAttributedString 样式正在接受超过截断点的“Windsor”实例。

您可以找到截断发生的位置,然后仅将文本属性应用于字符串的范围直到截断点。

请参阅this SO answer 以计算此范围。

NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.lineBreakMode = mylabel.lineBreakMode;
NSDictionary *attributes = @NSFontAttributeName : mylabel.font,
                             NSParagraphStyleAttributeName : paragraph;
CGSize constrainedSize = CGSizeMake(mylabel.bounds.size.width, NSIntegerMax);
CGRect rect = [mylabel.text boundingRectWithSize:constrainedSize
                                         options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                                      attributes:attributes context:nil];
if (rect.size.height > mylabel.bounds.size.height) 
    NSLog(@"TOO MUCH");

【讨论】:

好主意。唯一的问题是标签大小一直在变化,所以我必须进行太多次计算,而且成本很高。如您所见,它确实选择了背景颜色,但没有选择字体颜色。这闻起来像一个错误,我想知道是否有人设法弄清楚 这看起来像一个错误,所以我只是用不同的文本颜色而不是前景色突出显示文本。

以上是关于带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName的主要内容,如果未能解决你的问题,请参考以下文章

带有多个链接的 Flutter webview

Google 电子表格 CSV 导出的下载链接 - 带有多个表格

将鼠标悬停在图像上以获取一个带有 html/JavaScript 中的多个链接的框

需要从 MS Excel 的列表中展开 MS Word 中的多个查找和替换以替换带有超链接的文本并修复错误

多个链接数组的替代方案?

带有多个按钮和字体的多行 UILabel