12

UICollectionViewCell自動レイアウトを使用して、サブビューのサイズに基づいて のサイズを変更するにはどうすればよいですか?

UICollectionViewCellのそれぞれの には、ビューが 1 つしかありませんcontentViewUIViewこれは、自動レイアウトを使用してすべてのサブビューに合わせて自動的にサイズを変更する私のカスタムサブクラスです。また、-intrinsicContentSize正しく実装されます。ただしUICollectionView、またはそのレイアウトは、これを気にしていないようです。

私は を使用していてUICollectionViewFlowLayout、試しました:

  • itemSizeをデフォルト値のままにします。これにより、サイズが 50 x 50 のセルが得られます。
  • デリゲート メソッドの実装-collectionView:layout:sizeForItemAtIndexPath:。ただし、このメソッドが呼び出されると、セルは (明らかに) まだ画面に表示されておらず、自動レイアウト システムによって更新されていません。

標準の Apple クラスを使用して、サブビューに基づいてセルのサイズを変更する方法はありますか? それとも、独自のUICollectionViewLayoutサブクラスを実装する必要がありますか?

4

3 に答える 3

1

これを試しましたか:

[self.view layoutIfNeeded];
[UIView animateWithDuration:0.5 animations:^{
     constraintConstantForWidth.constant = subviews.size.width;
     constraintConstantForHeight.constant = subviews.size.height;
     [self.view layoutIfNeeded];
}];

制約の優先度を設定します (低 = 250)

この問題は、制約定数の置き換えで対処できると思います。

于 2015-09-19T13:12:59.317 に答える
-2

collectionView:layout:sizeForItemAtIndexPath を試してください:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
     return self.view.frame.size;
}
于 2014-04-16T19:11:19.720 に答える