2017-08-17 7 views
0

私のビューコントローラには、コンテナビューとして使用しているNSViewがあります。 ライブラリから「コンテナビュー」をドラッグし、セグおよび埋め込みビューコントローラを削除し、スーパービュー(ビューコントローラのメインビュー)に制約を追加し、ビューコントローラのコードでコンテナビューのコンセントを設定しました。コンテナビューでのCocoa、実行時の内容のスワップとサイズの保持

これまでのところとても良いです。

コンテナビューの内容を、実行時に決定された複数の異なるView Controllerのメインビューに入れ替えたいとします。私はこのようなコードで、それを行うことに成功しました:

func swapContainerViewContents(with viewController: NSViewController) { 
    self.containerView.subviews.foreach({ subview in 
     subview.removeFromSuperview() 
    }) 

    containerView.addSubview(viewController.view) 
} 

これは動作しますが、私は、ウィンドウのサイズを変更するとすぐに、子ビューは明らかに元のサイズのままで(私は任意の制約を設定していません) 。

代わりに、私は必要な制約を追加した場合:

let newView = viewController.view 

containerView.addSubview(newView) 

newView.leftAnchor.constraint(equalTo: containerView.leftAnchor).isActive = true 
newView.rightAnchor.constraint(equalTo: containerView.rightAnchor).isActive = true 
newView.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true 
newView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true 

を...今、ウィンドウのサイズを変更することはできません! (サブビューの初期サイズでスタックされています)。

どうすればいいですか?

答えて

0

それは私が行うために必要なすべてが私の制約を設定する前に次の行を追加で判明:

newView.translatesAutoresizingMaskIntoConstraints = false 

私はこれを必要としなければならない理由は、子ビューは、私がしたいことを考えると、私には明らかではないが、追加するには、ストーリーボードから作成されたビューコントローラに属しています(これらはすでにではなく、は自動サイズ変更マスクを制約に変換します...?);このコードは、プログラムで作成されたビューに対してのみ必要です。

関連する問題