I dont have a very good understanding on the topic, so please bear with me
I am trying to display a UIViewController inside another UIViewController. I feel like there aren't enough examples out there. I have read the documentation but being fairly new to iOS I am kind of lost.
Here is my problem: I can get the child UIViewController to appear inside the parent UIViewController but the child view is not displaying right.
Sorry, I cant post pictures yet.
Here is my child - UIViewController.
Here is my parent - UIViewController. (The blue area is where the child view is added)
Here are the results:
Blue UIView in place - http://i.imgur.com/4vny8EZ.png
If i move the blue UIView over to the right here is what happens
Blue UiView moved over to the right - http://i.imgur.com/XCOBwr6.png
I have tried a lot of different things but my lack of knowledge on the subject is really making it difficult to find out what is wrong.
Here is how I am loading my child UiViewController in my parent UIViewControllers class:
- (void)viewDidLoad
{
[super viewDidLoad];
// Add Calculations View Controller
CalculationViewController *calculationController = [self.storyboard instantiateViewControllerWithIdentifier:@"Calculate"];
[self addChildViewController:calculationController];
calculationController.view.frame = self.calcualtionView.bounds;
[self.calcualtionView addSubview:calculationController.view];
}
So, my question is why is it displaying the child view in a weird fashion?
Thank you!
Also, sorry about the links I could only post two.
Move the code to viewDidAppear. If calculationView is an IBOutlet to a view, its bounds will be zero in viewDidLoad. The frames of views are not set until viewDidAppear.
Quick answer: Views sizes aren't determined until
viewWillAppear
. Set the frame there and it will work.Longer answer:
1) If you are using iOS6, I would encourage you to use
NSLayoutConstraints
to deal with view size and positioning rather than manually setting view frames. It takes a bit to really wrap your head around constaints, but once you do they are much more powerful and flexible than setting frames and you won't have to worry about when or how yourIBOutlets
are created2) You are not adding your child view controller correctly. You must call
didMoveToParentViewController:
after the view is added. With the missing line of code as well as using contraints rather than frames your code looks like this: