10

有没有adjustsFontSizeToFitWidth可以与 NSTextField 一起使用的 UILabel 之类的东西?

4

3 回答 3

2

斯威夫特 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
    }
于 2017-12-23T18:01:42.680 回答
1

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

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

于 2010-12-22T15:28:25.633 回答
0

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

extension NSTextField {
    func fontSizeToFit() {
        if stringValue.count > 90 {
            font = NSFont.systemFont(ofSize: 40)
        } else {
            font = NSFont.systemFont(ofSize: CGFloat(120 - stringValue.count))
        }
    }
}
于 2020-03-03T08:19:55.690 回答