Search code examples
iosswiftstoryboardautolayout

Loading a ViewController inside a Container View


I have a containerView with full screen inside a VC. If i add a child to the containerView manually from a Storyboard doing a embed segue looks fine: enter image description here

But if I embed the VC by code:

class BannerContainerVC: UIViewController {

    @IBOutlet weak var container: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        let vc = storyboard?.instantiateViewControllerWithIdentifier("test") as UIViewController
        self.container.addSubview(vc.view)
    }
}

I get super strange results:

enter image description here


Solution

  • You need to tell your BannerContainer view controller that it has a new child controller, and to tell the Child that it has a parent VC. This is described in the Apple Docs here. Like this:

       [self addChildViewController:vc];
       vc.view.frame = CGRectMake(0, 0, self.container.frame.size.width, self.container.frame.size.height);
       [self.container addSubview:vc.view];
       [vc didMoveToParentViewController:self];
    

    Or in Swift:

        self.addChildViewController(vc)
        vc.view.frame = CGRectMake(0, 0, self.container.frame.size.width, self.container.frame.size.height);
        self.container.addSubview(vc.view)
        vc.didMoveToParentViewController(self)
    

    This ensures that various layout and touch methods are passed through to the child VC; I suspect the layout problems you have may be due to those methods not currently being called.