2017-12-27 13 views
0

ここには、左側のプロファイル(ProfileViewController)と右側のContainerView(ContainerViewController)を持つ私のアプリケーションがあります。私が達成しようとしているのは、containerViewControllerがその仕事をしたら、UIViewの高さを更新することです。コンテナビューの高さを変更する

enter image description here

// ContainerViewController.swift 
let heightConstraint = self.view.constraints.filter { $0.identifier == "Height" }.first 
heightConstraint?.constant = height 

制約のリストを参照するとき、彼らはすべてのemtpyだ、と私はストーリーボードにいくつかの制約を設定しました。なぜ ? ContainerViewController内のUIViewにアクセスする方法はありますか?

シモンズ:

DispatchQueue.main.async { 
    self.view.frame = CGRect(x: 0, y: 0, width: width, height: height) 
} 

が動作するように聞こえるが、私はそれは制約が適切である修正と思いますか?いいえ?

答えて

1

私がやることは、制約のためにIBOutletを設定し、それをContainerViewの中に格納することです。

この方法では、コード(またはストーリーボード)が将来変更された場合でも、この制約を得るために注文番号などに依存しません。

はい、正しい方法は、フレームを変更するのではなく、定数を設定することです。 しかし、拘束定数の変更もメイン(UI)スレッドに置く必要があることに注意してください。(あなたのコードの外観では、スレッドを扱っています。

+0

containerViewControllerで制約のIBOutletを設定できません。これはProfileViewControllerでリンクするときにのみ機能します。これはプロトコルを使用することを意味し、containerViewControllerはbaseController(ProfileViewController)を更新します。すべてのコントローラを独立させ、実際にIBouletをcontainerViewControllerにリンクする他の方法はありますか? – Alex

+0

containerViewControllerの中に制約がある場合、それはうまくいくはずですが、ProfileViewControllerに制約があり、containerViewControllerだけを調整している場合です。 (ストーリーボードツリーを見る)。ビューが初期化された後、ProfileViewControllerからcontainerViewControllerに制約を渡すことができます –

関連する問題