8

일단 장치를 회전하면 셀을 다시 그리는 방법은 어떻게됩니까?iOS - 동적 셀 높이가 회전중인 TableViewCell을 다시 그리기

iPhone에서 테스트 할 때 기본 방향은 세로입니다. 따라서 동적 인 셀은 장치가 세로 방향 일 때 필요한만큼 커야합니다. 즉 가로로 회전하면 많은 양이 있습니다. 셀의 빈 공간 iPad에서 테스트 할 때 반대입니다. 기본 텍스트는 가로이므로 세로 방향으로 회전하면 텍스트 일부가 잘립니다. 나는 두 장치에 대해 별도의 스토리 보드를 가지고 있고, 모두 뷰 컨트롤러는 "동향 : 유추"로 설정되어

enter image description here (세로) enter image description here (가로)

이 아이폰에 무슨 일이 일어나고 있는지입니다 - 신축 라벨이 어두운있다 빨간색 배경이므로 레이블의 실제 크기를 볼 수 있습니다. 그러나 셀 높이는 다시 계산되지 않으며 맨 아래 레이블은 셀의 맨 아래로 제한되어 있기 때문에 맨 아래에있는 모든 레이블이 자체적으로 표시됩니다.

enter image description here (라벨이 늘어납니다)

이 알려줍니다 무엇 : 나는 셀의 하단에 스트레칭 라벨 (배경 가진 하나)에서 제약 조건을 추가하면이하는 모든과 같이 라벨을 스트레칭입니다 나 지금 그게 바로 내가 방아쇠가 무엇인지 알기 위해 세포를 얻지 못하고 일단 바뀌면 다시 그려 줄 수 없다는 것이다. 컨테이너가 아무 소용이 willRotateToInterfaceOrientationdidRotateToInterfaceOrientationTableView 어디가, [self.container reloadData]을 시도 회전을 얻기 위해 지금까지

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (!self.opCell) 
     { 
      self.opCell = [self.container dequeueReusableCellWithIdentifier:@"OPCell"]; 
     } 
    self.opCell.opName.text = [[self.data objectAtIndex:indexPath.row] valueForKey:@"name"]; 
    [self.opCell layoutIfNeeded]; 
    CGFloat height = [self.opCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; 

    return height + 1; 
} 

다음은 셀의 높이를 계산하는 내 heightForRowAtIndexPath 코드입니다. 또한 viewDidLoad에 넣으려고 했으므로보기가 가로 모드에서 올바른 높이로로드 될 때 감지하고로드 할 수 있지만이 방법도 올바르지 않습니다. iPhone의 경우 세로보기 높이를로드하고 회전시 업데이트하지 않습니다.

내가 도움이 될 것이라고 생각되는 몇 가지 질문을 찾았지만 동일한 질문이있는 것처럼 보일지라도 this answer이 나를 위해 일하는 것처럼 보일 수없고 this one은 셀 너비에 더 집중하는 것으로 보입니다 높이와 나는 그것이 같은 방식으로 적용되는지 확신하지 못한다.

Here은 심지어 iPhone에서 실행했을 때 TableViewCells의 크기를 회전 중에 조정하지 않는 튜토리얼입니다.

This tutorial은 테이블 높이 변경에 대한 통찰력이있는 것으로 보였으므로 didRotateToInterfaceOrientationbegin/endUpdates 코드를 추가하여 변경이 발생할 수 있다고 생각했지만 효과가 없었습니다.

누군가가 제안을하거나 해결책을 알고 있다면, 내가 이걸로 벽돌 벽을 치고 있기 때문에, 대단히 감사하겠습니다!

+0

높이를 계산하는 것과 아무 관련이없는 물건을 옮겨야합니다. 좋은 시작이 될 것입니다. – nhgrif

+1

내 heightForRowAtIndexPath 메소드에 모든 코드가 필요합니다. 셀을 선언하고 동적 높이를 만들고 싶은 제목을 선언 한 다음 마지막 2 줄의 높이를 계산하도록 지시해야합니다. 동적 인 세포는 그들이 필요로하는 것보다 까다 롭고 이것이 효과적이다. –

+1

이것은 동적 인 tableViewCells를 생성하는 좋은 튜토리얼입니다. http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout – samir

답변

0

그래서 내 문제를 알아 냈습니다. this tutorial 다음에 내가 실종되었다는 것을 알았습니다. 내가 얻을 수있는 세포에게 현재를 업데이트해야 스트레칭과 preferredMaxLayout 화면 폭 내 heightForRowAtIndexPath에서

  • 를 충족되는 상태가되었다

    1. 서브 클래스 내 라벨 :

      나는에 있었다 화면의 너비

    자세한 내용은 자습서를 참조하십시오. 이 질문과 답변이 미래에 누군가에게 도움이되기를 바랍니다. 매우 번거롭기 때문입니다.

  • -1

    here과 같은 트릭을 사용할 수 있습니다. 전화 :

    [tableView beginUpdates]; 
    [tableView endUpdates]; 
    

    중간에 아무 것도 쓰지 않습니다. 이것은 테이블 뷰에 대한 heigh 재 계산을 트리거합니다.

    +0

    내가 말했듯이, 나는 이미 이것을 시도했지만 어떤 결과도 얻지 못하고 있습니다. 나는이 메소드를'ViewDidLoad','viewDidLayoutSubviews','heightForRowAtIndexPath','didRotateFromInterfaceOrientation'과'reloadRowsAtIndexPath'에 넣으려고했습니다. 내가 넣어야 할 다른 곳이 있습니까? –

    +0

    나는 단지'didRotateFromInterfaceOrientation'에서 설정할 것입니다. 당신이 언급하는 대부분의 다른 메소드는'begin' /'endUpdates'에 의해 트리거되고 루프를 유발할 수 있습니다. – Rivera

    +0

    나는 다른 곳과 마찬가지로 이곳을 혼자서 사용해 보았습니다. 이것은 저에게 효과적이지 않습니다. –

    1

    여기에 단어 감싸는 것 같습니다.이전 경험에 비추어 다음과 같이 제안합니다 :
    1) sizeWithFont 또는 해당 linebreakmode가있는 최신 iOS7 버전을 사용하십시오.
    2) 프레임 크기를 다시 정의 할 수있는 "opCell"에 대해 layoutSubview를 구현할 수 있습니다.
    3) 회전 중에 셀 높이를 계산합니다. 새 tabelView Bounds에 따라 너비를 올바르게 설정했는지 확인하십시오.
    4) 또한 테이블 재로드 작업에 대한 빠른 예상 크기를 위해 estimatedHeightForRowAtIndexPath를 구현할 수 있습니다.

    희망이 도움이됩니다!

    +0

    1) 현재 스토리 보드에서 줄 수를 0으로 사용하여 레이블의 크기를 조정하고 있습니다. like, heightForRowAtIndexPath에서 sizeWithFont를 사용해야합니까? 이것은 단지 레이블의 높이에 차이를 만들 것입니까? 2와 3을위한 방법 heightForRowAtIndexPath가 아닌,이 방법으로 셀 크기를 구현하는 방법은 무엇입니까? –