UIViewController viewDidLoad incorrect width/height
If you are targetting iOS 5.0 or better you can use viewWillLayoutSubviews
and viewDidLayoutSubviews
to make changes.
As for your second question, if you need access to an instance variable in other method than init
, you need to keep it around, I don't see a problem with it.
You can, however, try to use Auto Layouts and set up rules between the subviews so it's automatically laid out for you without the need to keep a reference.
viewWillLayoutSubviews
and viewDidLayoutSubviews
can resolve this problem.
But the two methed would be performed more times.
this is my code to get correct self.view.frame
.
- (void)viewDidLoad {
[super viewDidLoad];
...
dispatch_async(dispatch_get_main_queue(), ^{
// init you view and set it`s frame. this can get correct frame.
...
}
...
}
viewDidLoad
only gets called when your view is created, but lots of things can affect the frame
's size, and it doesn't get called again when frame
changes.
Instead:
- create subviews in
viewDidLoad
- set their sizes in
viewWillLayoutSubviews
.
See some additional discussion here for handling rotation: https://stackoverflow.com/a/16421170/1445366