大きな UICollectionViewCell (明らかに UICollectionView の高さの 2 倍以上) が特定のスクロール オフセットで消え、特定のスクロール オフセットの後に再表示されるという同じ問題が発生しています。
UICollectionViewをサブクラス化し、カスタム アクションを実行する@JonathanCichon ソリューションを実装しました_visibleBounds
(プライベート API であることはわかっていますが、Apple Store に送信する必要はありません)。
ここで私のカスタムコレクションビュー:
#import "CollectionView.h"
@interface UICollectionView ()
- (CGRect)_visibleBounds;
@end
@implementation CollectionView
- (CGRect)_visibleBounds
{
CGRect rect = [super _visibleBounds];
rect.size.height = [self heightOfLargestVisibleCell];
return rect;
}
- (CGFloat)heightOfLargestVisibleCell
{
// get current screen height depending on orientation
CGFloat screenSize = [self currentScreenHeight];
CGFloat largestCell = 0;
NSArray *visibleCells = self.visibleCells;
// get the largest height between visibleCells
for (UITableViewCell *c in visibleCells)
{
CGFloat h = c.frame.size.height;
largestCell = h > largestCell ? h : largestCell;
}
// return higher value between screen height and higher visible cell height
return MAX(largestCell, screenSize);
}
これは機能し、スクロールしても消えなくなりましたが、まだ問題があります。スクロール位置が大きなセルの真ん中にあるときに実行すると、以前と同じように消えます...データをリロードした後、戻るreloadData
ことに気付きました(私の方法)、それは私の画面の高さを取りますが、画面の高さ<現在の表示セルの高さであるため、これは表示されません...visibleCells
nil
heightOfLargestVisibleCell
_visibleBounds
誰かがすでにこの問題に直面していますか?
事前にThx