Немного проблем, связанных с вашим кодом.
Во-первых, вам не нужно, насколько я могу судить, из ограниченного объема вашего кода, вам не нужно устанавливать свойство zPosition
слоя на все, кроме значения по умолчанию, равного нулю. Используя addSubview
, добавление, которое вы добавляете, автоматически добавляется в начало всех текущих подзаголовков.
Во-вторых, по существу нет ничего плохого в создании фреймов программно, однако чаще всего это приведет к проблемам на устройствах с разными размерами экрана. Кроме того, поскольку вы устанавливаете ширину представления равным ширине другого представления, я рекомендую использовать автозапуск, который автоматически изменит ширину, если она изменится. Он также позволяет создавать гибкий интерфейс для всех классов/размеров экрана.
controller.view.frame = CGRectMake(0, -150, self.view.frame.size.width, 150);
В-третьих, нет необходимости вручную запускать controller.viewDidLoad()
, как он вызывается автоматически, как только его рама была установлена.
В-четвертых (!) Вы устанавливаете рамку представления, которая должна быть скрыта в верхней части экрана. Я не уверен, что это правильная функциональность, но хотелось бы убедиться, что вы знаете, что, устанавливая начало координат представления, равное значению рамки, нижняя часть представления будет выровнена с вершиной его надзора.
Контроллеры контроля контейнеров представляют собой контроллеры просмотра, которые содержат другие контроллеры представлений, что позволяет создавать более модульный код и отдельные виды в управляемые контроллеры. Вместо этого следует использовать этот шаблон.
См. https://www.objc.io/issues/1-view-controllers/containment-view-controller/ для получения дополнительной информации.
В следующем коде я также выполняю проверку, чтобы увидеть, является ли переменная controller
равной нулю, что предотвратит сбой при попытке развернуть контроллер и не относится к классу MenuViewController
. Понятно, что это несколько педантично, так как вы можете быть уверены, что созданный экземпляр контроллера верен, но всегда лучше быть в безопасности, чем сожалеть.
let storyboard = UIStoryboard(name: "Main", bundle: nil)
if let controller = storyboard.instantiateViewControllerWithIdentifier("menu") as? MenuViewController {
controller.view.frame = CGRectMake(0, -150, self.view.frame.size.width, 150);
// Frame may need to be modified to be made visible^
addChildViewController(controller)
controller.willMoveToParentViewController(self)
mainView.addSubview(controller.view)
controller.widMoveToParentViewController(self)
}
Почему вы устанавливаете 'zPosition? 'Добавление его в качестве подзапроса автоматически приведет его к передней панели. –
И почему вы делаете все эти вещи вручную? –
без zPosition не работает:/ –