【问题标题】:Height of 2-line UILabel with given font给定字体的 2 行 UILabel 的高度
【发布时间】:2018-07-09 20:38:39
【问题描述】:

如何使用给定字体计算2行UILabel的高度?

我知道,一般多行标签有一种方法可以动态计算它们的大小

let label = UILabel()
label.numberOfLines = 0
label.text = "Some multiline [...] text"

let constraintSize = CGRect(width: aWidth, height: CGFloat.greatestFiniteMagnitude)
let size = aLabel.sizeThatFits(constraintSize)

现在,我想知道的是:在不知道将要写在标签中的文本的情况下,只知道字体,我怎样才能优雅地计算跨越 准确 2 (还是一般 x) 行?

优雅含义:也许有人找到比这更好的解决方案:

let label = UILabel()
label.numberOfLines = 2
label.text = "Some really, really, really, [...] long text to make sure it spans at least 2 lines even for the tiniest fonts."

let constraintSize = CGRect(width: aWidth, height: CGFloat.greatestFiniteMagnitude)
let size = aLabel.sizeThatFits(constraintSize)

感谢您的帮助!

【问题讨论】:

    标签: ios swift uilabel


    【解决方案1】:

    以下将为您提供两行文本的大小。用您选择的字体替换字体:

    let attrs: [NSAttributedStringKey: Any] = [.font: UIFont.systemFont(ofSize: 17)]
    let twoLineHeight = "\n".size(withAttributes: attrs).height
    

    【讨论】:

    • 这确实很优雅:“\n”。 有时你只见树木不见森林。谢谢!
    【解决方案2】:
    func labelHeightFor(_ text:String, font:UIFont, width:CGFloat) -> CGFloat{
        let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude))
        label.numberOfLines = 2
        label.lineBreakMode = NSLineBreakMode.byWordWrapping
        label.font = font
        label.text = text
        label.sizeToFit()
        return label.frame.height
    }
    

    【讨论】:

    • 感谢您的帮助,但这不是我要问的。见上文:我不在乎具体的文字。无论文本如何,我都想获得 2 行标签的高度。
    猜你喜欢
    • 1970-01-01
    • 2018-03-22
    • 2015-06-20
    • 1970-01-01
    • 2023-03-08
    • 2021-11-04
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多