2012-11-05 2 views
7

다른 사용자 정의 셀이 포함 된 컬렉션 뷰가 있습니다.UICollectionView : UICollectionViewCell 객체는 sizeForItemAtIndexPath에서 항상 null입니다.

이 셀에는 크기가 다른 내용이 들어 있습니다.

셀은 스토리 보드에 정의되어 있으므로 코드에 등록 할 필요가 없습니다.

내가 지금하고 싶은 모든

은 내용에 따라 위임 방법의 크기를 변경할 수 있습니다 : 모든 셀에 대해 예상대로라고

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 

id cellAtIndexPath = [collectionView cellForItemAtIndexPath:indexPath]; 

NSLog(@"The cell: %@", cellAtIndexPath); 

... 
e.g. calling sizeToFit methods and cumulating the sizes of the cells' subviews 
... 

} 

방법을하지만, cellAtIndexPath는 관계없이 항상 NULL을 반환하지 않습니다 내가 시도했다. 따라서 indexPath 또는 해당 내용보기에서 셀 개체에 액세스 할 수 없습니다.

셀 객체에 액세스 할 수없는 이유는 무엇입니까?

답변

11

collectionView:layout:sizeForItemAtIndexPath 메서드는 컬렉션 뷰의 흐름 레이아웃 객체에 의해 호출됩니다. 레이아웃은 셀이 컬렉션보기에 추가되기 전에 의 셀 크기를 묻는 것입니다. 전에 셀을 추가합니다. 원하는 셀 크기를 "직접"계산하여 반환해야합니다.

+2

고마워요! 따라서이 관점에서 하위 뷰에 따라 다른 셀 높이를 설정할 수 없습니다 (일반적으로 sizeToFit을 호출하여 계산). 내용에 따라 셀의 "크기를 조정할"가능성이 있습니까? 예 : UILabels의 경우, line과 textlength로 높이를 계산해야합니다. 그리고 그것은 매우 부정확 할 것입니다. – crud21

+0

오른쪽. 내용에 따라 셀 크기를 계산하는 방법을 찾을 수 있지만 셀보기에 의존 할 수는 없습니다. (예 :'NSString'은 텍스트 크기를 얻기위한 메소드를 제공합니다.) – chris

+4

이것은 바보스럽고 불행합니다. 아직 존재하지 않는 셀을 요청하면 'UITableView'가 데이터 소스로 이동하지 않고 셀을 가져 오지 않습니다. ? – jtbandes

관련 문제