6

UICollectionViewサブクラス化によって装飾ビューを追加しましたUICollectionViewFlowLayout。私m placing decoration view under each row in collection view. Itはうまくいきます。装飾ビューが表示されます。ただし、問題は、アイテムの1行全体を削除した後、装飾ビューがコレクションビューから削除されないことです。しかし、ヘッダービューとフッタービューは正しく再配置され、私は処理しません。削除後に装飾ビューを削除する場所がわかりません。助けて。の装飾ビューの計算prepareLayoutは問題ありません。装飾ビューの数とフレームは正しいです。

ここに画像の説明を入力してください ここに画像の説明を入力してください

(図1)削除前(図2)削除後

4

4 に答える 4

2

他のどの情報源からも回答が得られませんでした。だから、iamは私の経験から答えるつもりです。実際には、コレクションビューは、アイテムを削除した後、装飾ビューの補足ビュー(ヘッダー/フッター)も削除しません。あなたが手動でしなければならないこと。おそらく、collectionViewのバグになるでしょう。

prepareLayoutメソッド で装飾ビューを削除します

 /// Collection view is not removing the added decoraion views afeter deletion. Remove yourself to fix that
for (UIView *view in self.collectionView.subviews) {
    if ([view isKindOfClass:[DecorationView class]])
    {
        [view removeFromSuperview];
    }

}
于 2013-05-28T06:30:39.350 に答える
2

のメソッドを使用しUICollectionViewLayoutて、補足/装飾ビューを削除します。

func prepare(forCollectionViewUpdates updateItems: [UICollectionViewUpdateItem])

func indexPathsToDeleteForSupplementaryView(ofKind elementKind: String) -> [IndexPath]

func indexPathsToInsertForDecorationView(ofKind elementKind: String) -> [IndexPath]

それらに精通していない場合は、まあ、あなたは本当に注意深くドキュメントを読むべきです

于 2017-12-05T04:32:19.657 に答える
1

iOS 7以降、コレクションビューのデータが変更されるたびに、カスタムレイアウトをオーバーライド-indexPathsToInsertForDecorationViewOfKind:して、装飾ビューを追加/削除できます。-indexPathsToDeleteForDecorationViewOfKind:

于 2017-02-27T18:29:45.900 に答える
0

これは実際にはバグではありません。ドキュメントごとの装飾ビューは、データソースから独立しています。

デコレーションビューは、コレクションビューレイアウトの外観を向上させる視覚的な装飾です。セルや補足ビューとは異なり、装飾ビューは視覚的なコンテンツのみを提供するため、データソースから独立しています。それらを使用して、カスタムの背景を提供したり、セルの周囲のスペースを埋めたり、必要に応じてセルを隠したりすることができます。デコレーションビューは、レイアウトオブジェクトによってのみ定義および管理され、コレクションビューのデータソースオブジェクトとは相互作用しません。

コレクションビューの背後に背景画像を追加し、その表示をデータから独立させたままにする場合は、装飾ビューの方が適しています。

ヘッダー、フッター、およびその他の補足ビューは、次の方法でデータソースを使用して更新できます。

  collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView

そして、それらの配置とレイアウトは、オーバーライドすることによって制御できます

layoutAttributesForElementsInRect(rect: CGRect) -> [AnyObject]? 

layoutAttributesForSupplementaryViewOfKind(elementKind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes! 

カスタムフローレイアウト内から。

この問題を解決する最善の方法は、装飾ビューを手動で見つけて削除したくない場合は、装飾ビューを補足ビューに置き換えることです。そうすれば、データソースを使用して更新できます。

于 2015-02-06T15:23:52.480 に答える