你的代碼很少有問題。
首先,根據代碼的有限範圍,我不需要將層的zPosition
屬性設置爲除默認值0之外的任何其他值。通過使用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不起作用:/ –