2013-07-15 4 views
0

큰 UICollectionViewCell (UICollectionView 높이의 두 배 이상)이 주어진 스크롤 오프셋에서 사라지고 주어진 스크롤 오프셋 후에도 다시 나타나기 때문에 here과 같은 문제가 발생합니다. 나는 (나는 그것이 개인 API 알고 있지만 상관없이, 나는 애플 스토어에 제출 할 필요가 없습니다) 여기큰 UICollectionViewCell이 스크롤 할 때 사라집니다.

내 사용자 지정을 UICollectionView를 서브 클래스와 _visibleBounds에 사용자 지정 작업을 수행하는 것입니다 @JonathanCichon solution을 구현했습니다

모음보기 :

이 작동
#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을 수행하는 경우, 그것은 ... 으로 이전 사라 데이터를 다시로드 한 후에 나타났습니다.(내 heightOfLargestVisibleCell 방법)반환 nil, 그것은 _visibleBounds에 대한하지만 현재 눈에 보이는 셀 높이 화면 높이 < 때문에 내 화면의 높이를 가지고 있으므로,이 하나가 표시되지 않습니다 ...

누군가가 이미이 문제에 직면? 사전

답변

1

에서

들으 나는 당신의 문제에 대한 해결책을 얻었다. heightOfLargestVisibleCell에 의해 계산 된 값을 저장하고 데이터를 다시로드 한 후 마지막 값을 반환합니다.

@interface CollectionView : UICollectionView 
@property (nonatomic, assign) CGFloat lastLargestCellHeight; 
@property (nonatomic, assign) BOOL shouldEvalLargestCellHeight; 

@end 

@implementation CollectionView 

- (CGRect)_visibleBounds 
{ 
    CGRect rect = [super _visibleBounds]; 
    rect.size.height = [self heightOfLargestVisibleCell]; 
    return rect; 
} 


- (CGFloat)heightOfLargestVisibleCell 
{ 
    if (self.shouldEvalLargestCellHeight) { 
     // get current screen height depending on orientation 
     CGFloat screenSize = self.frame.size.height; 

     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 
     self.lastLargestCellHeight = MAX(largestCell, screenSize); 
     self.shouldEvalLargestCellHeight = NO; 
    } 
    return self.lastLargestCellHeight; 
} 

- (void)reloadData 
{ 
    self.shouldEvalLargestCellHeight = NO; 
    [super reloadData]; 
} 

- (void)setContentOffset:(CGPoint)contentOffset 
{ 
    self.shouldEvalLargestCellHeight = YES; 
    [super setContentOffset:contentOffset]; 
} 

@end 
+0

많은 Thx 그것은 매력처럼 작동합니다! – Yaman

관련 문제