我有Storyboard和XIB VCs。剛剛體驗一下:爲什麼從xib初始化VC視圖的框架不是MainScreen的大小?
當從XIB初始化VC時,其視圖的大小是{600,600},但是如果從Storyboard初始化,其視圖的大小與UIScreen.main().bounds
相同。
爲了深入挖掘,似乎從故事板初始化時,視圖獲得了屬性view.window != nil
,而如果從XIB初始化它的window == nil
。也許這是奇怪的大小的原因。
我的問題是:爲什麼,以及如何從xib獲得VC的視圖獲得了正確大小的MainScreen?
我試圖像這樣手動設置:vc.view.frame = UIScreen.main.bounds
,它的工作原理。但是,這也會觸發viewDidLoad
,我在那裏爲我的內容做了一些設置,並且當時的IBOutlet尚未加載,並且每個設置都是錯誤的!
因此,提出了一個獎勵問題:如何從XIB初始化後強制加載IBOutlet?
一些示例代碼造成這樣的問題:
import MFSideMenu
...
// initialize from somewhere else and push it to menu.containerVC.centerVC
let vc = MyVC.init(nibName:MyVC.className, bundle:self.nibBundle)
...
// This method is from subclass of MFSideMenuVC
func pushCenterVC(vc: UIViewController!) {
// This cause the setup in vc.viewDidLoad go wrong
// If side menu is load for the first time, it doesn't have its window yet.
if self.view.window != nil {
vc.view.frame = self.view.window.bounds
}
self.menuContainerViewController.centerViewController = vc
// If I put it here, MFSideMenu will create an ugly shadow because of wrong initilize frame size.
// if self.view.window != nil {
// vc.view.frame = self.view.window.bounds
// }
}
您可能將您的xib文件設置爲使用大小類別。尺寸等級爲600x600,即使是故事板 –
@YunusErenGüzel好的,我的應用程序假設支持多種設備,那麼如果沒有AutoLayout和SizeClass的幫助,我們該怎麼做呢? – Eddie
你不能改變它。這是它應該如何工作的。爲什麼這是你的問題? –