ContainerView(subview)を扱う際のメモ

More than 1 year has passed since last update.

ContainerViewの配置はwAny|hAnyだけでなくCompactやRegularサイズでも調整しておく。autoLayoutを使ってる場合は各サイズで制約をつけること。

親になるviewとsubviewの制約をつけておかないとsubview内で表示するviewのレイアウトが崩れるので注意。これに気付かず相当な時間を潰した。

embedでなくソースでContainerViewとViewControllerを紐づける場合はviewDidLayoutSubviews()内で処理する事。またContainerViewの中身の切り替えをする時もソース内でロジックを書くこと

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        let afterVc:UIViewController =
        (self.storyboard?.instantiateViewControllerWithIdentifier("childViewController"))!

        self.addChildViewController(afterVc)
        self.view.addSubview(afterVc.view)
        afterVc.didMoveToParentViewController(self)

    }

例)子view呼び出し

参考リンク
Container View Controllerを正しく使おう

[iOS6] AutoLayoutを使用すると、viewWillAppear: でframeが決定しないので注意

上記のリンクはiOS6上でObjective-Cで書いた内容ですが、iOS9でswift2でも当てはまる内容です。

個人的にはまったのがviewDidLayoutSubviewsは画面が再表示される度に呼び出されるので例えば別画面を呼び出して、呼び出した先から返ってくる時には元の画面の状態を維持してたいがviewDidLayoutSubviewsが呼び出されてしまうので画面の状態が初期化される、という事。

とりあえずの措置として以下のように対処。子viewがオンメモリしているかどうかで処理を場合分けしてみた。

if(self.childViewControllers.count == 0) {

//子viewController設置

}
カテゴリ:Default 時間:2015-10-25 人気:0
この記事では、 AutoLayout Swift

関連記事

Copyright (C) socapnw.com, All Rights Reserved.

Socapnw All Rights Reserved.

processed in 1.827 (s). 11 q(s)