ios - Why frame of VC's view init from xib not the size of MainScreen? -
i have both storyboard , xib vcs. experience this:
when initialize vc xib, view's size {600, 600}, if initialize storyboard, view's size same uiscreen.main().bounds.
to dig deeper, seems when initialized storyboard, view got property view.window != nil, while if initialized xib, window == nil. maybe it's reason strange size.
my question is: why, , how vc's view xib got correct size of mainscreen?
i tried set manually this: vc.view.frame = uiscreen.main.bounds, , works. however, trigger viewdidload setup contents, , iboutlet @ time hasn't loaded , every setup wrong!
so, bonus question raised: how force load iboutlet after initialized xib?
some sample code cause question:
import mfsidemenu ... // initialize somewhere else , push menu.containervc.centervc let vc = myvc.init(nibname:myvc.classname, bundle:self.nibbundle) ... // method subclass of mfsidemenuvc func pushcentervc(vc: uiviewcontroller!) { // cause setup in vc.viewdidload go wrong // if side menu load first time, doesn't have window yet. if self.view.window != nil { vc.view.frame = self.view.window.bounds } self.menucontainerviewcontroller.centerviewcontroller = vc // if put here, mfsidemenu create ugly shadow because of wrong initilize frame size. // if self.view.window != nil { // vc.view.frame = self.view.window.bounds // } }
my question is: why, , how vc's view xib got correct size of mainscreen?
you expecting right size when sizing code didn't run yet. after func viewdidlayoutsubviews() ran, view have correct size. using size of view before asking trouble , relying on undefined behavior can change new ios release.
how force load iboutlet after initialized xib?
easily, access view in init() method of view controller. example ask size of view, view loaded.
Comments
Post a Comment