在容器视图中加载ViewController

God*_*her 22 storyboard ios autolayout swift

我在VC中有一个全屏的containerView.如果我从一个故事板手动添加一个子容器到containerView做一个嵌入segue看起来很好: 在此输入图像描述

但是如果我通过代码嵌入VC:

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到了超级奇怪的结果:

在此输入图像描述

pba*_*sdf 62

您需要告诉您的BannerContainer视图控制器它有一个新的子控制器,并告诉Child它有一个父VC.这是在苹果文档描述这里.像这样:

   [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];
Run Code Online (Sandbox Code Playgroud)

或者在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)
Run Code Online (Sandbox Code Playgroud)

这确保了各种布局和触摸方法传递给子VC; 我怀疑你的布局问题可能是由于当前没有被调用的那些方法.


Lui*_*ias 8

试图使用上面的答案但事实证明CGRectMake不再可用.

针对Swift 3进行了更新:

self.addChildViewController(vc)
vc.view.frame = CGRect(x: 0, y: 0, width: self.container.frame.size.width, height: self.container.frame.size.height)
self.container.addSubview(vc.view)
vc.didMoveToParentViewController(self)
Run Code Online (Sandbox Code Playgroud)