質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

489閲覧

container viewに紐づけたview controllerが表示されない

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/08/31 07:46

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 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

自己解決しました。

MainViewController内でdidMoveする前に、
container viewとChildViewController.viewに制約をかけてあげたら表示されました。

投稿2018/08/31 07:56

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問