Есть ли что-то вроде adjustsFontSizeToFitWidth
UILabel, которое можно использовать с NSTextField?
Измените размер шрифта NSTextField, чтобы он соответствовал
Ответы (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