В приложении OS X, как использовать автоматическую компоновку, когда окно создается программно?

Мое приложение OS X пытается программно создать окно, как показано ниже (предложено другим вопросом SO, который я видел ранее):

class MyViewController: NSViewController {

    override func loadView() {

        let view = NSView(frame: NSMakeRect(0,0,300,100))
        view.wantsLayer = true
        view.layer?.borderWidth = 2
        view.layer?.borderColor = NSColor.red.cgColor
        self.view = view
   }
}

let viewController = MyViewController()
let window = NSWindow(contentRect: someFrame, styleMask: [.resizable, .closable, .miniaturizable, .titled], backing: NSBackingStoreType.buffered, defer: false)

window.contentView?.addSubview(viewController.view)
window.makeKeyAndOrderFront(nil)

Я могу успешно создавать окна с помощью приведенного выше кода. Однако мой вопрос: как сделать представление, созданное в loadView внутри контроллера представления, того же размера, что и представление содержимого окна?

Прямо сейчас он создает представление с фиксированными числами (0, 0, 300, 100). Как сделать это представление того же размера, что и окно, используя автоматическую компоновку, чтобы при изменении размера окна это представление также изменялось автоматически?


person Joe Huang    schedule 25.05.2017    source источник
comment
почему вы не можете использовать ограничения между window.contentview и viewcontroller.view? Просто используйте ограничения, чтобы закрепить верхнее, левое, правое и нижнее представление viewcontroller.view в window.contentview.   -  person Abhishek    schedule 14.06.2017


Ответы (1)


Можно подумать, что Apple задокументирует такое. И действительно:

https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/ProgrammaticallyCreatingConstraints.html

person Florian Zwoch    schedule 25.05.2017
comment
Я знаю, как использовать автоматические макеты, но не в моем коде выше. Как вы получаете здесь contentView окна, чтобы выполнять ограничения автоматического макета? Я не спрашиваю о том, как сделать автоматическую верстку вообще. Спасибо. - person Joe Huang; 25.05.2017