代码之家  ›  专栏  ›  技术社区  ›  sohan vanani

将最大行数设置为NSMutableAttributeString

  •  1
  • sohan vanani  · 技术社区  · 6 年前

    let linkTitleAttributed = NSMutableAttributedString(string: message.getLinkTitle() ?? "" , attributes: [NSFontAttributeName: UIFont.systemFontOfSize(19.0)])
    //linkTitleAttributed should be maximum 2 lines.
    
    let linkDescAttributed = NSAttributedString(string: message.getLinkDescription() ?? "", attributes: [NSFontAttributeName: UIFont.systemFontOfSize(15.0)])
    //linkDescAttributed should be maximum 5 lines.
    
     let finalAttributed = NSMutableAttributedString()
            final.append(linkTitleAttributed)
            final.append(linkDescAttributed)
    

    我想到了一个解决方案(将文本设置为独立文本视图并获得可见范围),但我正在寻找一个更好的解决方案。 谢谢

    1 回复  |  直到 6 年前
        1
  •  0
  •   Diphaze    6 年前

    您必须处理标题和描述的字符串,然后创建一个新的 NSAttributedString . 比如:

    func limitNumLines(_ msg: String, max: Int) -> String{
        if max <= 0 { return "" }
    
        let lines = msg.components(separatedBy: "\n")
    
        var output = ""
        for i in 0..<max {
            output += lines[i] + "\n"
        }
        return output
    }
    
    let titleMessage = "LINE1\nLINE2\nLINE3\nLINE4"
    let descMessage = "line1\nline2\nline3\nline4\nline5\nline6"
    
    //linkTitleAttributed (that is, message) should be maximum 2 lines.
    let title = limitNumLines(titleMessage, max: 2)
    let linkTitleAttributed = NSMutableAttributedString(string: title , attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 19.0)])
    
    //linkDescAttributed should be maximum 5 lines.
    let desc = limitNumLines(descMessage, max: 5)
    let linkDescAttributed = NSAttributedString(string: desc , attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 15.0)])
    
    
    let finalAttributed = NSMutableAttributedString()
    finalAttributed.append(linkTitleAttributed)
    finalAttributed.append(linkDescAttributed)