NSViewController, отображаемый внутри контейнера, не выравнивается по границам контейнера в приложении Cocoa App Swift [Mac OS] - PullRequest
1 голос
/ 13 мая 2019

Код NSViewcontroller с представлением контейнера

@IBOutlet weak var cv: NSView!
override func viewDidLoad() {
    super.viewDidLoad()
      let vc2 = storyboard?.instantiateController(withIdentifier: "vc2") as! VC2
    addChild(vc2)
    vc2.view.frame=cv.bounds
    cv.addSubview(vc2.view)
    cv.wantsLayer=true
    cv.layer?.backgroundColor=NSColor.red.cgColor

}

Код NSViewController для отображения в представлении контейнера

   override func viewDidLoad() {
    super.viewDidLoad()
    self.view.wantsLayer=true
    self.view.layer?.backgroundColor=NSColor.white.cgColor

}

Я добавил белый слой для описания моеговопрос лучше enter image description here

Я правильно установил ограничения для представления контейнера в раскадровке и проверил, что представление контейнера также занимает весь ViewController.

Почемумой viewController установлен только на часть представления контейнера и не полностью?

Изображение консоли ContainerView Bounds enter image description here

Начальный размер вашего резюме и полное окно480 * 270.И в этот момент ваш размер vc2 также правильный.Но тогда я изменяю размер вашего полного окна.CV изменяет размеры, но не vc2.

Ответы [ 2 ]

3 голосов
/ 13 мая 2019

Проблема в том, что когда вы используете ограничения, они изменяют размер с изменениями в макете.Но в vc2 вы дали ему постоянный размер в начале.Вот почему, даже если вы измените размер окна, оно не будет изменено.Попробуйте программно назначить ограничения для vc2.view, чтобы прикрепить его к суперпредставлению (cv).Это обеспечит изменение размера vc2.view с помощью cv.

. Обязательно назначьте ограничения после cv.addSubview(vc2.view).

Извлеките эту библиотеку , которая удалит многокода котельной плиты при создании ограничений.

0 голосов
/ 13 мая 2019

Если вы хотите изменить размер представления контейнера при изменении размера NSViewController (MainViewController), просто добавьте представление контейнера в основной NSViewcontroller, как показано на скриншоте

enter image description here

Укажите следующие ограничения AutoLayout для вашего контейнера: Leading, tralling, Top, Bottom ограничение для супер-просмотра

enter image description here

И последнее подключите ваш vc2 к представлению контейнера, вот и все.

enter image description here

Теперь размер вашего контейнера автоматически изменяется при изменении размера вашего MainViewcontroller. Нет необходимости писать код для представления контейнера в MainViewController.

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