更改NSTextField字体大小以适应

时间:2010-12-21 19:51:44

标签: cocoa macos fonts uilabel nstextfield

是否有类似UILabel的adjustsFontSizeToFitWidth可以与NSTextField一起使用?

3 个答案:

答案 0 :(得分:1)

简而言之:不。您必须执行一些强力工作来确定具有给定字体大小的字符串-sizeWithAttributes: -boundingRectWithSize:options:attributes:(设置为NSFont的NSFontAttributeName)。

我从一个标准的系统字体大小开始,然后从那里向下或向上工作,这取决于它是否小于或大于所需的矩形。

答案 1 :(得分:0)

Swift 4解决方案:

它会一个接一个地调整大小,直到它适合,或直到minimumFontSize = 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
    }

答案 2 :(得分:0)

我想出了自己的解决方案(这不是一个很好的解决方案,以防万一找不到更好的解决方案)

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