VC内にフルスクリーンのcontainerViewがあります。埋め込みセグエを実行しているストーリーボードからcontainerViewに子を手動で追加するとうまくいきます:
しかし、コードで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)
}
}
私は非常に奇妙な結果を得る:
BannerContainer View Controllerに新しい子コントローラーがあることを通知し、Childに親VCがあることを通知する必要があります。これはApple Docs here で説明されています。このように:
[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];
またはスウィフトで:
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)
これにより、さまざまなレイアウトおよびタッチメソッドが子VCに渡されます。レイアウトの問題は、現在呼び出されていないメソッドが原因であると思われます。
上記の答えを使用しようとしましたが、CGRectMake
はもう利用できません。
Swift:の更新
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)
Swift 4.2/5。
let listVc = ListViewController()
listVc.view.frame = CGRect(x: 0, y: 0, width: self.listView.frame.width, height: self.listView.frame.height)
addChild(listVc)
listVc.didMove(toParent: self)
ListViewControllerは、埋め込まれるもう1つのView Controllerです。
この関数を呼び出すだけです:-
private func addChildView(viewController: UIViewController, in view: UIView) {
viewController.view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
viewController.view.frame = view.bounds
addChild(viewController)
view.addSubview(viewController.view)
viewController.didMove(toParent: self)
}