Я пытаюсь получить NSTextField
, чтобы автоматически изменить его высоту, основываясь на текстовом содержимом, когда размер окна изменяется вокруг него.Самое близкое, что я смог получить, - это реализовать функцию layout()
и установить для значения preferredMaxLayoutWidth
текущий размер фрейма, но это работает только при растущем представлении.
Текстполе ограничено ведущими, задними и верхними якорями основного вида, с отступом 50:
Я могу перетащить правую сторонуокно для увеличения ширины и NSTextField
будет корректно корректировать его ширину (автоматическое расположение) и высоту, но тогда я не смогу снова уменьшить окно:
Любая помощь очень ценится, поскольку я слишком долго пытался решить эту проблему.
let myTextField: NSTextField = NSTextField()
class myView: NSView {
override func layout() {
super.layout()
myTextField.preferredMaxLayoutWidth = myTextField.frame.width
super.layout()
}
required init?(coder decoder: NSCoder) {
super.init(coder: decoder)
self.wantsLayer = true
self.layer?.backgroundColor = NSColor.green.cgColor
myTextField.wantsLayer = true
myTextField.layer?.backgroundColor = NSColor.yellow.cgColor
myTextField.bezelStyle = .roundedBezel
myTextField.isEditable = false
myTextField.isBordered = false
myTextField.textColor = NSColor.black
myTextField.translatesAutoresizingMaskIntoConstraints = false
myTextField.preferredMaxLayoutWidth = 50
self.addSubview(myTextField)
myTextField.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 50).isActive = true
myTextField.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -50).isActive = true
myTextField.topAnchor.constraint(equalTo: self.topAnchor, constant: 50).isActive = true
myTextField.stringValue = "The width of the inspector is variable and is user controlled. It is not controlled (nor defined by) any constraints. Only the gray views and the NSTextField labels in the screenshots are using auto layout. (And all of this is done in code, not in Interface Builder.) I'll re-visit subclassing and manually doing layout in layout but I was hoping to minic the wrapping behavior seen in Finder's Get Info panel using only constraints."
}
}