UICollectionView と UIImageView を含むビューを持つビュー コントローラーがあります。
UICollectionView とイメージ ビューは、UIViewController のマネージド ビューの兄弟です。ユーザーが UICollectionView をスクロールすると、UIImage が UICollectionViewCell アイテムの 1 つの下部にアタッチされることがあります。
自動レイアウトを使用するようにプロジェクトを変換しています。制約を使用して UIImageView を UICollectionViewCell の下部にアタッチできることに本当に興奮しました。ただし、機能していないようです。
関連する UICollectionViewCell が表示されたことをコードが検出すると、UIImageView から以前の配置制約を削除し、UIImageView の上部を UICollectionViewCell の下部と同じにする制約を追加します。
それが起こると、UIImageViewは消えます。セルが表示される前に UICollectionViewCell にアタッチされていると思いますが、それで問題ありません。スクロールして表示する必要があります。それは起こっていません。
だから私の質問はこれです...これは今までに機能しますか? UICollectionView が昔ながらの中心/境界システムを使用してアイテムを管理している可能性が非常に高いようです。特に UICollectionViewLayout プロトコルを見ると。それは、制約を UICollectionViewCell にアタッチできず、セルがコレクション ビュー内で移動されるときに制約が更新されることを期待できないということですか?
高レベルの「設計図に戻る」問題ではなく、単純なコーディングの問題である場合に備えて、関連するコードを以下に添付します。
if([collectionView.indexPathsForVisibleItems containsObject:self.sliderPositionIndex]){
UICollectionViewCell *lockedCell=[collectionView cellForItemAtIndexPath:self.sliderPositionIndex];
[self.view removeConstraint:self.sliderVerticalSpaceConstraint];
self.sliderVerticalSpaceConstraint=[NSLayoutConstraint constraintWithItem:self.sliderTab
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:lockedCell
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0];
[self.view addConstraint:self.sliderVerticalSpaceConstraint];
[self.view setNeedsUpdateConstraints];