Использование предпочитаемое значение MaxLayoutWidth NSTextField с автоматической разметкой - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь получить NSTextField, чтобы автоматически изменить его высоту, основываясь на текстовом содержимом, когда размер окна изменяется вокруг него.Самое близкое, что я смог получить, - это реализовать функцию layout() и установить для значения preferredMaxLayoutWidth текущий размер фрейма, но это работает только при растущем представлении.

Текстполе ограничено ведущими, задними и верхними якорями основного вида, с отступом 50:

Window before dragging the width

Я могу перетащить правую сторонуокно для увеличения ширины и NSTextField будет корректно корректировать его ширину (автоматическое расположение) и высоту, но тогда я не смогу снова уменьшить окно:

Window after dragging the width

Любая помощь очень ценится, поскольку я слишком долго пытался решить эту проблему.

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."

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...