UILabel中NSAttributedString的尾部截断

33
我正在使用ContextLabel解析@、#和URL。这是我找到的最好的解决方案,因为它能正确调整大小并不影响性能。它首先解析输入字符串,然后将其转换为NSAttributedString,最后将其分配给UILabelattributedText属性。一切都按预期运行,除了尾部截断-它非常不正确(见下图)。

进入图片描述

我应该从哪里开始挖掘-是属性字符串上的错误属性还是标签布局问题?谢谢!


你是在硬编码标签的宽度吗? - Feroz
3个回答

81

我曾经遇到过这个问题,通过添加一个指定所需换行模式的 NSParagraphStyle 来解决它:

    //assuming myString is an NSMutableAttributedString
    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.lineBreakMode = .byTruncatingTail

    let range = NSRange(location: 0, length: myString.mutableString.length)
    myString.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: range)

请参考NSMutableAttributedString的自动换行


21

无论是使用AttributedText还是普通文本,以下方法都适用。
确保在将AttributedText和字体设置到标签后添加以下行:

label.lineBreakMode = .byTruncatingTail

你让我今天过得很愉快!谢谢。关键词 - AFTER - Dmih

1
func htmlToAttributedString() -> NSAttributedString?
    {
        guard let data = data(using: .utf8) else { return nil }
        do
        {
            let paragraphStyle = NSMutableParagraphStyle()
            paragraphStyle.alignment = .left
            paragraphStyle.lineBreakMode = .byTruncatingTail
            
            
            let content = try NSMutableAttributedString(data: data, options: [.documentType:     NSAttributedString.DocumentType.html, .characterEncoding:     String.Encoding.utf8.rawValue], documentAttributes: nil)
            
            content.addAttributes([NSAttributedString.Key.paragraphStyle: paragraphStyle,
                                   NSAttributedString.Key.font: UIFont(name:"Poppins-Medium",size:18),
                                   NSAttributedString.Key.foregroundColor: UIColor(red: (94.0/255.0), green: (90.0/255.0), blue: (90.0/255.0), alpha: 1.0)],
                                  range: NSMakeRange(0, content.length))
            
            return content
        }
        catch
        {
            return nil
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接