2010-12-16 7 views
3

UITableViewController의 흐름을 이해하는 데 어려움을 겪고 있습니다. 기본적으로 여기에 내 구조가있다 :heightForRowAtIndexPath는 항상 두 번 호출됩니다.

나는 물론 tableViewController가있다. 그리고 여기에 getCellContentView와 cellForRowAtIndexPath를 사용하여 내 셀과 관련된 모든 작업을 수행합니다. 내 셀에는 각각의 방향에 대해 하나씩 고유 한 프레임이있는 몇 개의 UILabels가 있습니다. 모든 방향 변경 및 프레임 다시 그리기를 감지하고 올바르게 수행합니다. 거기에는 문제가 없습니다. 여태까지는 그런대로 잘됐다.

이제 가로 방향으로 100을 반환하고 세로 방향으로 200을 지정하려면 heightForRowAtIndexPath가 필요합니다. 내 문제는 그 안에 NSLog 때, tableView 회전 할 때 어떤 이유로 든 메서드를 두 번 호출됩니다. 누구나 회전이 두 번 발생하는 이유를 아는 사람이 있습니까? 나는 -reloadData가 문제일지도 모른다고 생각하고 어떻게 든 두 번 회전 할 때 -reloadData를 호출했는지 확인했다. willRotateToInterfaceOrientation 메서드 내에서 -reloadData를 한 번만 호출하고 코드에서 아무 것도 호출하지 않습니다 (첫 번째 viewDidLoad 호출 내 제외).

각 회전 이벤트에서 heightForRowAtIndexPath가 두 번 호출되는 이유는 무엇입니까? 또한 heightForRowAtIndexPath가 회전이 시작될 때 방향을 올바르게 결정할 수없는 것으로 나타납니다. 상태 막대 방향 특성을 사용하여 heightForRowAtIndexPath 내부에서 적절한 셀 높이를 반환하는지 확인합니다. 어떤 도움이 굉장 할 것입니다! 이 원하는 때마다 테이블 뷰를 호출 할 수 충분히 빨리해야하며, 그것은 중요하지 않습니다 : heightForRowAtIndex의

귀하의 구현 : 호출되는 얼마나 많은 시간을 걱정

답변

0

. 내가 추측이 있다면

그러나, 회전 두 단계 (. didAnimateFirstHalfOfRotationToInterfaceOrientation보고 : 등등의 UIViewController 설명서)에서 이루어집니다 당신이 rotatino 동안 UIKit의있는 UITableViewController 클래스에 의해 수행되고 있는지 아무 생각이 - 어쩌면 그것은 새로 고침 것 당신을위한 테이블보기 자체?

willRotateToInterfaceOrientation을 재정의하려고 시도 했습니까? 회전하려는 방향을 지정해야합니다. 원하는 셀 높이를 설정할 수 있습니까? 이 같은

뭔가 :

- (NSInteger)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return rowHeight; 
} 

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration { 
    [super willAnimateRotationToInterfaceOrientation:interfaceOrientation duration:duration]; 

    rowHeight = (UIInterfaceOrientationPortrait == interfaceOrientation) ? 100 : 200; 
    [tableView reloadData]; 
} 
+0

씨 deanWombourne, 나는 당신을 사랑합니다 (경고, 테스트되지 않은 메모리에서 입력!)! 일했다! 이제 회전 내부에서 테이블이 두 번 렌더링되는 이유를 알아 내기 위해 (두 번의 reloadData 호출이 이루어진 것처럼) 읽습니다. – user511872

관련 문제