2017-06-30 1 views
0

作品:私はcollectionView.isHidden後にこれを行う場合はiOSの - ランタイムの変更制約私はこのコードを、要素の可視性に基づいて、その長楽制約持っている唯一の初めて

if (self.collectionView.isHidden){ 
    controller.view.bottomAnchor.constraint(equalTo: self.collectionView.topAnchor).isActive = false 
    controller.view.bottomAnchor.constraint(equalTo: self.view2.topAnchor).isActive = true 
} 
else { 
    controller.view.bottomAnchor.constraint(equalTo: self.collectionView.topAnchor).isActive = true 
    controller.view.bottomAnchor.constraint(equalTo: self.view2.topAnchor).isActive = false 
} 

がtrueに設定されている、それが動作します。しかし、collectionView.isHidden = trueを設定してこのコードを呼び出すと、もう機能しなくなり、controller.viewがまだview2の先頭にアタッチされます。 collectionView ANT IST値に取り付け高さの制約もあり、私は手動でもあるため、このことなくcollectionView.frame.size.height = 50(またはいくつかの他のデフォルト値)を設定しようとしている50

ある、collectionView.frame.size.heightの高さはゼロです。しかし、動作しません。私はcollectionView.updateConstraints()を呼び出してみましたが、効果がありません。

答えて

3

だから、あなたは関数を呼び出すたびに新しい制約を設定していると思います。実際には以前のものを削除しているわけではありません。私はこのように、それは後で有効化/無効化できるように、私は制約への参照を保持するこの種のロジック必要がある場合

通常:

var controllerBottomAnchor: NSLayoutConstraint? 

をそれから私はそうのようにそれを割り当てます。

controllerBottomAnchor = controller.view.bottomAnchor.constraint(equalTo: self.collectionView.topAnchor) 
controllerBottomAnchor?.isActive = true 

私はちょうどリファレンスを使用し、それを変更する必要がありたら:

controllerBottomAnchor?.isActive = false 

私は、通常の幅のためにそれを使用します高さのアンカー。

+0

ありがとうございました。あなたが正しいです、私はchcedし、私のソリューションは、私がメソッドを呼び出すたびに新しい制約を作成していた。私はそれが何らかの方法でキャッシュされていると思っていましたが、常に同じ制約を返しますが、それはありません:) –

+1

残念ながら、キャッシュされていません。あなたがそれを解決してうれしい – Luca

関連する問題