2012-10-18 3 views
2

내 앱에서 맞춤 표보기 셀이있는 표보기가 있습니다. In iOS5 다음 코드 스 니펫을 사용하여 사용자 정의 된 셀의 정확한 높이를 가져옵니다. [tableView reloadData]를 수행 한 후 iOS6에서 [cell layoutIfNeeded]는 셀 layoutSubViews 메소드를 트리거하지 않습니다. 그리고 그로 인해 셀 높이가 잘못 계산됩니다. 이것이 무엇인지에 대한 좋은 제안이 있습니까? 아니면 그것을하는 다른 방법?iOS6 layoutIfNeeded가 UITableViewCell의 layoutSubViews를 트리거하지 않습니다.

- (CGFloat)tableView:(UITableView *)aTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [self tableView:aTableView cellForRowAtIndexPath:indexPath]; 
    [cell setNeedsLayout]; 
    [cell layoutIfNeeded]; 
    [cell sizeToFit]; 

    return cell.frame.size.height; 
} 

답변

1

코드 조각에는 테이블보기 수명주기와 관련된 기본적인 오류가 있습니다. 내가 주장한대로 iOS 5 또는 어디에서나 작동하는 경우 운이 좋을 수도 있습니다.

우선, tableView:heightForRowAtIndexPath:을 BEFORE tableView:cellForRowAtIndexPath:이라고합니다. 이 시점에서 NO 셀이 존재합니다. 여기서 UITableViewCell *cell = [self tableView:aTableView cellForRowAtIndexPath:indexPath];으로 전화하지 않아도됩니다.

tableview의 하위 뷰를 배치하는 경우 (뷰 컨트롤러의 최상위 뷰라고 가정), viewWillLayoutSubviews 뷰 컨트롤러의 메서드를 재정의 할 수 있습니다. 이것이 바로 Apple이 권장하는 것입니다.

테이블 뷰 셀의 하위 뷰를 배치하는 경우 UITableViewCell의 서브 클래스를 만들고 layoutSubviews 메서드를 재정의 할 수 있습니다.

관련 문제