2010-07-06 8 views
2

테이블 뷰에서 동적 높이를 가진 사용자 지정 UITableViewCells를 사용합니다. 동적 텍스트 블록뿐만 아니라 높이가 다른 이미지가 있기 때문에 레이아웃 알고리즘이 복잡합니다. 해당하는 heightForRowAtIndexPath가 호출되면 테블 뷰 셀이 렌더링되지 않았습니다. 높이를 두 번 계산해야합니까? cellForRowAtIndexPath에 대한 heightForRowAtIndexPath 및 onece에 대해 한 번? 아니면 결합하는 방법이 있습니까?동적 테이블 높이. 행 높이의 중복 계산?

답변

-2

계산 코드를 두 번 쓸 필요는 없습니다. cellForRowAtIndexPath:에서 모든 노력을 다한 다음 결과를 사용하여 높이 메서드에서 높이를 가져올 수 있습니다. 예를 들어, 높이 법은 (는 맞는 데 도움이되는 몇 가지 짧은 이름을 사용)과 같이 수 :

// I usually use descriptive variable names, but they won't fit on one line here. 
- (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)i { 
    UITableViewCell *cell = [self tableView:t cellForRowAtIndexPath:i]; 
    return cell.frame.size.height; 
} 

이 코드의 나쁜 부분은이 방법이 테이블 전에 테이블의 모든 행에 대해 호출되는 것입니다 먼저 응용 프로그램에서 지연으로 나타날 수있는 OS가 표시됩니다. 시간이 지남에 따라 높이가 변하면 높이를 계산하는 것이 더 빠를 것입니다. 그렇습니다. 그렇습니다. 그러나 행 높이가 시간 경과에 따라 항상 (행마다) 동일하면 높이를 캐시 할 수 있습니다. 당신이 사용할 수있는 캐싱 코드

참조가 : http://bynomial.com/blog/?p=90

+4

이 작동하지 않습니다 heightForRowAtIndexPath은 cellForRowAtIndexPath 전에 호출됩니다 때문이다. 또한 'heightFor'메서드 내에서 'cellFor'메서드를 호출하면 무한 루프가 생성됩니다. 나는 같은 질문을하고 내 제안 된 솔루션에 대한 조언을 요청했다 : http://stackoverflow.com/questions/4823197/iphone-when-to-calculate-heightforrowatindexpath-for-a-tableview-when-each-cell – JohnRock