Измените размер шрифта NSTextField, чтобы он соответствовал

Есть ли что-то вроде adjustsFontSizeToFitWidth UILabel, которое можно использовать с NSTextField?


person Fernando Valente    schedule 21.12.2010    source источник


Ответы (3)


Короче: нет. Вам нужно выполнить некоторую работу грубой силы, чтобы определить -sizeWithAttributes: -boundingRectWithSize:options:attributes: с заданным размером шрифта (устанавливается как NSFont для NSFontAttributeName).

Я бы начал со стандартного системного размера шрифта и работал вниз или вверх, в зависимости от того, меньше он или больше желаемого прямоугольника.

person Joshua Nozzi    schedule 22.12.2010

Решение Swift 4:

Он будет изменять размер один за другим, пока не подойдет, или до минимального размера шрифта = 3.

    let minimumFontSize = 3

    var sizeNotOkay = true
    var attempt = 0

    while sizeNotOkay || attempt < 15 { // will try 15 times maximun
        let expansionRect = textField.expansionFrame(withFrame: textField.frame)

        let truncated = !NSEqualRects(NSRect.zero, expansionRect)

        if truncated {
            if let actualFontSize : CGFloat = textField.font?.fontDescriptor.object(forKey: NSFontDescriptor.AttributeName.size) as? CGFloat {
                textField.font = NSFont.systemFont(ofSize: actualFontSize - 1)

                if actualFontSize < minimumFontSize {
                    break
                }
            }
        } else {
            sizeNotOkay = false
        }

        attempt += 1
    }
person ricardo    schedule 23.12.2017

Я придумал свое собственное решение (это не очень хорошее решение! На случай, если кто-то не сможет найти лучшее решение)

extension NSTextField {
    func fontSizeToFit() {
        if stringValue.count > 90 {
            font = NSFont.systemFont(ofSize: 40)
        } else {
            font = NSFont.systemFont(ofSize: CGFloat(120 - stringValue.count))
        }
    }
}
person Ahmadreza    schedule 03.03.2020