2012-10-15 3 views
0

UITableViewCellUIImageView이 포함 된 디자인이 있습니다. 이 이미지는 세로 또는 가로 비율이 같아야합니다.이 때문에 UIDeviceOrientationDidChangeNotification 알림을 사용하여 인터페이스 방향이 변경 될 때 호출되는 메서드가 있습니다.UITableView setRowHeight 변경 내용 커밋 방법

-(void)updateRowHeightForOrientation:(UIInterfaceOrientation)orientation { 

    if(!IS_KNOWN_ORIENTATION(orientation)) 
     return; 

    CGFloat rowHeightPortrait = (IPAD ? 320. : 160.); 
    CGFloat widthPortrait = (IPAD ? 768. : 320.); 
    CGFloat orientationWidth = (IS_PORTRAIT(orientation) ? 
           (IPAD ? 768. : 320.) : 
           (IPAD ? 1024. : 480.)); 

    CGFloat resultingRowHeight = rowHeightPortrait * orientationWidth/widthPortrait; 

    [self.tableView setRowHeight:resultingRowHeight]; 
// [self.tableView reloadData]; /* works if uncommented */ 
} 

줄이 주석 처리되지 않은 경우보기가 다시 그려지고 행 높이가 올바르게 설정됩니다. 그렇지 않은 경우 [self.tableView setNeedsDisplay] 또는 [self.tableView setNeedsLayout]을 사용하는 경우에도 속성의 새 값이 사용되지 않습니다.

새 값이 적용되도록 강제로 UI를 다시로드하려면 어떻게해야합니까?

그것은 당신의 도움은 ... rowHeight 속성이 인터페이스 회전하기 전에 설정되고 다시 그려하지만, 어떤 이상한 이유로이 방법은 더 이상 호출되지 않기 때문에 -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration를 사용하여 몇 시간 동안

감사했다!

답변

1

나는

[self.tableView beginUpdates]; 
[self.tableView endUpdates]; 

모든 행의 높이를 다시 평가하기 위해 테이블 ​​뷰의 원인이라고 생각, 그래서 당신이 시도 할 수 있습니다.

+0

이것은 완벽합니다. 불행하게도, 나는 셀, 텍스트가 가운데에 있으면 전체 너비를 사용하도록 동적으로 크기를 조절하는 UILabel을 가지고 있습니다. 화면을 회전 시키면 레이블의 오른쪽이 이동 한 것처럼 보입니다. 그러면 텍스트가 가운데에 표시됩니다. 정말보기에는 아름답 지 않습니다. 만약에 그들이 더 나은 행동을 취하는 어떤 방법이라면 나는 그것을 어떻게 알고 싶다. 그렇지 않다면 그렇게 중요하지 않다. – dvkch