container viewに紐づけたview controllerが表示されません。
view controllerにラベル一つのみ、というような簡単なView Controllerへの紐づけは上手くいっていて表示もされるのですが、制約をバリバリかけているView Controllerは表示されないという状態です。
何か原因わかる方教えてください。
##全体構成
MainViewController
└ContainerView
ChildViewController(ContainerViewとembedでつなぐ)
##コード
ContainerViewのembed先を動的に変えるため、IBを使わず以下のようなコードを書いてContainerViewとVCをつないでいます。
override func viewDidLoad() { super.viewDidLoad() let mainCv = self.storyboard?.instantiateViewController(withIdentifier: "child") self.addChildViewController(mainCv!) self.mainContainerView.addSubview(mainCv!.view) mainCv!.didMove(toParentViewController: self) }
この書き方で、ChildViewControllerのviewDidLoad()が呼び出されるところまでは確認できています。
ChildViewControllerの中身は以下のようになっています。
ちなみにMainControllerからコードで紐付けるのではなく、storyboard上でembedした場合、以下のコードで想定どおりの表示になりました。
storyboard上で紐づけていたときChildViewController.parentはnilだったので、このあたりが影響しているのではないか、と推測しているのですが、わかりません。
let baseView: UIView = UIView() override func viewDidLoad() { self.view.translatesAutoresizingMaskIntoConstraints = false let scrollView = UIScrollView() scrollView.translatesAutoresizingMaskIntoConstraints = false baseView.backgroundColor = .red // for debug baseView.translatesAutoresizingMaskIntoConstraints = false self.view.addSubview(scrollView) scrollView.addSubview(baseView) scrollView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true scrollView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true scrollView.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true scrollView.rightAnchor.constraint(equalTo: self.view.rightAnchor).isActive = true scrollView.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true self.baseView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true self.baseView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true self.baseView.leftAnchor.constraint(equalTo: scrollView.leftAnchor).isActive = true self.baseView.rightAnchor.constraint(equalTo: scrollView.rightAnchor).isActive = true self.baseView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true self.baseView.heightAnchor.contraint(equalToConstant: 2000).isActive = true }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。