ここで説明されているのと同じ動作が、この質問UICollectionView
につながっています。自分で投稿することにしましたが、さらに調査したため、コメントや上記の質問の編集に投稿したくありませんでした。
何が起こるのですか?:
大きなセルが で表示されている場合、コレクション ビューを特定のオフセットまでスクロールするUICollectionView
とUICollectionViewFlowLayout
、セルが消えます。
別のセルが表示領域に入るまでさらにスクロールすると、消えた/非表示のセルが再び表示されます。
垂直スクロール コレクション ビューと全幅セルでテストしましたが、水平スクロールの同様の設定でも発生することは確かです。
ラージセルとは?:
説明されている動作は、セルがディスプレイの高さの 2 倍よりも高い場合に発生します ( 960.f + 1.f
3.5 インチ ディスプレイ、1136.f + 1.f
4 インチ ディスプレイ)。
正確には何が起こりますか?:
コレクション ビューのスクロール オフセットがcell.frame.origin.y + displayHeightOfHardware
セルを超えると、非表示プロパティが設定されYES
、-collectionView:didEndDisplayingCell:forItemAtIndexPath:
呼び出されます (たとえば、3.5 インチの iPhoneにscrollingOffset.y
到達すると、最初のセルが非表示に変更されます)。481.f
上記のように、次のセルが表示されるまでスクロールすると、非表示のセルが再び表示されます (つまり、hidden プロパティが に変更されますNO
)。までスクロールします。
これは、トリプル ディスプレイの高さ ( ) より大きいセルを操作する場合に変化します1441.f/1705.f
。これらは同じ動作を示しますが、どれだけ上下にスクロールしても同じままです。
ほかに何か?:
-(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
returnにオーバーライドしても状況は修正されませんYES
。
NO
セルが非表示になった後、プログラムで非表示プロパティを設定してセルを強制的に表示することはできません(didEndDisplayingCell
たとえば)
それで、質問は何ですか?:
これはバグであると確信しており、UICollectionView/Controller/Cell/Layout
Apple に TSI を提出します。しかし、それまでの間:迅速なハッキング ソリューションのアイデアはありますか?