2014-12-01 2 views
1

모든 화면에서 테이블 뷰를 사용하는 애플리케이션이 있습니다. 나는 각기 다른 높이를 가진 커스텀 셀을 많이 가지고있다. 지금 높이를 계산하는 것은 꽤 어려운 일입니다. heightForRowAtIndex를 사용하지 않고 각 사용자 지정 셀의 높이를 반환하는 제네릭 메서드를 찾고 있습니다. 이유는 하나의 셀 뒤에 xibs가 4 개 있기 때문에 heightForRowAtIndex를 사용하지 않으려 고합니다.이 메토를 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {} 검사 종류로 처리하고 싶지 않기 때문입니다. 기록을 위해 세포 xibs 영어 및 아랍어 버전 모두 아이폰, 아이 패드 같습니다
cell_ar.xib
cell_ar ~ ipad.xib 현재
IOS가 사용자 정의 셀의 테이블 뷰 행 높이를 계산합니다.

ipad.xib, 내가 노력하고
cell_en.xib
cell_en ~ 수행원;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
      { 
       switch (indexPath.row) { 

       case 0: 
       { 
        VPCell1 *cell=[VPCell1 cellForTable:tableView withOwner:self]; 
        [tableView setRowHeight:CGRectGetHeight(cell.contentView.frame)]; 
        return cell; 
       } 
       case 1: 
       { 
        VPCell2 *cell=[VPCell2 cellForTable:tableView withOwner:self]; 
        [tableView setRowHeight:CGRectGetHeight(cell.contentView.frame)]; 
        return cell; 
       } 
       case 2: 
       { 
        VPCell3 *cell=[VPCell3 cellForTable:tableView withOwner:self]; 
        [tableView setRowHeight:CGRectGetHeight(cell.contentView.frame)]; 
        return cell; 
       } 
      } 
    } 

여기서 I는 [tableView setRowHeight:CGRectGetHeight(cell.contentView.frame)]; 각 셀의 행의 높이를 설정하기 위해 사용하고있다.
tableview 내의 모든 셀의 높이가 같을 경우 setRowHeight 메서드를 사용해야하므로 성능 최적화를 위해 여기서는 선택 사항이 아닙니다. 나는이 혼란을 해결하기위한 아이디어에 열려있다.
감사합니다.

+0

어? 행 높이를 설정하려면 heightForRowAtIndexPath를 사용해야합니다. –

+0

아한, 예를 들어 20 개의 화면에 맞춤형 셀을 사용하고 있습니다. 높이에 따라 xib 파일을 변경해야한다고 가정하면,이 변경을 위해 각 tableviewcontroller 내부의 셀 높이를 변경해야한다고 제안합니다. 그 고통스러운 접근 방식은 그렇지 않습니까? –

답변

0

iOS8에서는 AutoLayout을 사용하여 UITableView에서 행 높이를 계산할 수 있습니다. 행 높이의 자기 평가에 대한 jQuery과 이야기하려면있는 viewDidLoad에이 라인을 작성해야합니다 :

self.tableView.rowHeight = UITableViewAutomaticDimension; 
self.tableView.estimatedRowHeight = 50.0; // your estimated average cell height 

그리고 사용자 정의 세포에서

당신이 방법 "layoutSubviews"를 무시할 수 있습니다

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    // Make sure the contentView does a layout pass here so that its subviews have their frames set, which we 
    // need to use to set the preferredMaxLayoutWidth below. 
    [self.contentView setNeedsLayout]; 
    [self.contentView layoutIfNeeded]; 


    self.details.preferredMaxLayoutWidth = CGRectGetWidth(self.details.frame); 
} 

위에서 설명한 방법은 모든 요소가 컨텐츠 뷰에 ​​배치 된 맞춤 셀을 기반으로합니다. 또한 모든 요소는 제약 조건으로 관리해야합니다.

체크 아웃 내 Example Project github.

0

tableview의 모든 셀의 높이가 같으면 tableview rowHeight를 설정하지만 tableview가로드 될 때 한 번만 컨트롤러 viewDidLoad에서 가정 해 봅시다.

동일한 tableView에 높이가 다른 셀이있는 경우 heightForRowAtIndexPath를 사용해야합니다. 그리고 아뇨, 고통스럽지 않습니다. 단지 설계된 방식 일뿐입니다.