web-dev-qa-db-ja.com

コンテナービュー内でのViewControllerの読み込み

VC内にフルスクリーンのcontainerViewがあります。埋め込みセグエを実行しているストーリーボードからcontainerViewに子を手動で追加するとうまくいきます: enter image description here

しかし、コードで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)
    }
}

私は非常に奇妙な結果を得る:

enter image description here

19
Godfather

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に渡されます。レイアウトの問題は、現在呼び出されていないメソッドが原因であると思われます。

58
pbasdf

上記の答えを使用しようとしましたが、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)
8
Luiz Dias

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)
 }
0
DEEPAK KUMAR