16

装飾と補足的な見解ではUICollectionView、大きな謎のようです。現在、サンプルコードはほとんどないようです。両方のタイプをカスタムレイアウトで機能させることができました(詳細については、この投稿を参照してください)。それらが同じ位置にある限り、すべてが正常です(つまり、それらlayoutAttributes.frameが変わらない場合)。

ただし、装飾ビューまたは補足ビューのいずれかを変更して再レイアウトするとすぐに、layoutAttributes視覚的に複製されます。つまり、元の場所の背景にコピーがあり、新しい場所にコピーがあります。XIBから、または完全にコードでインスタンス化した場合の動作は同じであり、通常のセルでは動作しません。

最初はある種の再描画の問題だと思いましたが、これらの「コピー」は再レイアウトや再描画などで存続します。ただし、layoutAttributesForDecorationView(新しい場所でのみ)呼び出されることはないため、実際のコピーではありません。のバックグラウンドでキャッシュが行われているようUICollectionViewです。

誰かがこれを機能させたか、何かアイデアを持っていますか?私はiOSプラットフォームに慣れていないので、「ClipsBound」または「ClearGraphics Context」プロパティを設定するなどの簡単なこともできます(私はそれらを試しましたが、似たようなものである可能性があります)。

これは私を夢中にさせており、そこにサンプルコードがまったくないのは奇妙です。

私は自分自身に問いかけています:装飾と補足ビューは再配置されることを意図していませんか?(私は望んでいません)

4

5 に答える 5

1

私も同じ問題を抱えていました。UICOllectionviewにはいくつかのバグがあるようです(これは私が最初に見たものではありません)。「performBatchUpdates」を使用しないことで修正しました。アニメーションが失われますが、リストには不要なビューはありません。

于 2012-11-27T11:55:31.290 に答える
1

私も似たような症状でした。私の問題は、カスタム レイアウトを作成するときに、 kindIDではなく補助ビューのreuseIDを誤って含めてしまったことです。

具体的には、私はこれを持っていました (間違った)

UICollectionViewLayoutAttributes *attributes = 
  [UICollectionViewLayoutAttributes
    layoutAttributesForSupplementaryViewOfKind:myViewReuseID
    withIndexPath:sectionIndexPath];

私はこれをいつ持つべきか(

UICollectionViewLayoutAttributes *attributes = 
  [UICollectionViewLayoutAttributes
    layoutAttributesForSupplementaryViewOfKind:myViewKindID
    withIndexPath:sectionIndexPath];

つまり、prepareForReuse が呼び出されることはなく、私の古いビューが消えることはありませんでした。代わりに、彼らは積み上げ続けました。

于 2016-04-21T22:32:04.880 に答える
0

Apple は、少なくとも装飾ビューの場合、それらが意図したとおりに機能していることを示すと思います。最後のセクションのサイズを変更し、セクションが変更されたときにセクションを囲むように装飾ビューを設定しようとしたときに、この同じ問題に遭遇しました。最初は背景が赤いだけの単純なビューを使用すると、アプリの背景全体が赤くなり、混乱しました。その後、装飾ビューのレイアウト属性でアルファを 0.3f に変更したところ、セクションが変更されたときにそれらが互いに重なり合っていることがわかりました。

UICollectionViewのチュートリアルで読んだ行でしたが、これが設計によるものである可能性があることを本当に教えてくれました

一方、装飾ビューはデータ駆動型ではなく「装飾用」です。iBooks アプリの本棚の背景を考えてみてください。

重要なのは、装飾ビューはデータ駆動型ではなく、カスタム レイアウトでこれを実行できるかどうかに関係なく、データが変更されても変更されるべきではないということです。本棚の場合と同様に、作成後に棚のサイズが変更されることはありません。

于 2013-02-21T16:25:55.863 に答える