2016-06-20 8 views
2

2つのレイアウトを切り替えることができるcollectionviewがあります。 1つのレイアウトは、通常のフローレイアウトのようなもので、アイテムの幅と高さを自動サイズ変更します。もう1つはアイテムの幅が固定されていて、高さが自動化されたテーブルビューのレイアウトにする必要があります。TableViewのようなUICollectionViewレイアウト

私はcollectionView(_:layout:sizeForItemAtIndexPath)を使用して2つのレイアウトを実装することができましたが、固定されたアイテムサイズのみを使用しました。したがって、上記のデリゲートメソッドを実装せずに可能であれば、セルフサイジングセルを最大限に活用したいと思います。

セルをテーブルビューのようなレイアウトで全幅にする際に、セルの自動サイズを最適にするにはどうすればよいですか?

+1

なぜテーブルビューもなく、その2つのテーブルビューを切り替えるのはなぜですか? –

+2

単一のuicollectionviewのレイアウトを切り替えるとレイアウト間のアニメーションが可能になるので – fabb

+0

これは面白いです:https://github.com/Raizlabs/RZUtils/tree/master/RZUtils/Components/RZCollectionTableView – fabb

答えて

-2

コレクションビューの幅が変更されてもスクロールの影響を受けない場合は、カスタムレイアウトを無効にする必要があります。幸いにも、コレクションビューはその新しい境界をshouldInvalidateLayoutForBoundsChange:メソッドに渡します。同様にアニメーションすることができます別のコレクションビューのレイアウトから

- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds 
{ 
CGRect oldBounds = self.collectionView.bounds; 
if (CGRectGetWidth(newBounds) != CGRectGetWidth(oldBounds)) { 
    return YES; 
    } 
    return NO; 
} 

変更:これは、新しい値にビューの現在の境界を比較し、我々が持っている場合にのみYESを返すために私達を可能にします。 setCollectionViewLayout:animated:メソッドが送信されると、コレクションビューはセルの新しいレイアウト属性の新しいレイアウトを照会し、古いセルと新しいセルの新しい属性の各セル(古いレイアウトと新しいレイアウトの同じインデックスパスによって識別される)をアニメートします。あなたは何かをする必要はありません。

+0

しかし、私はセルフサイジングのセルを持つことができますテーブルビューのようなレイアウトの場合は全幅ですか? – fabb

+0

の2つのレイアウトサブクラスファイルを作成します。 –

+0

完全なコードを投稿できますか?私は自動サイジングの部分に苦労しています。 – fabb

関連する問題