2013-08-22 1 views
2

현재 위치를 유지하면서 높이 변경을 애니메이션으로 변경하면서 UITableView의 모든 셀을 확장/축소 할 수 있기를 바랍니다. 기본적으로보기의 현재 셀이 확장/축소되고 스크롤 위치가 동일하게 유지되어야합니다. 내가/확장 높이가 다른 2 개 개의 상태를 갖는 스크롤 위치를 유지하면서 모든 UITableViewCells의 애니메이션 높이를 변경하십시오.

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic]; 

를 호출하여 세포를 접촉 할 수있어 내가 수행하여 같은 위치를 유지하기 위해 노력했습니다

는 (100 %이 계산은 정확) :이 작업의 종류에 보이는 동안은 애니메이션으로,이 위치를 유지하지 않습니다

 //calculate the new position it should scroll to based on new cell height 
     CGFloat posFromTop = self.tableView.contentOffset.y; 
     CGFloat newDistance = 0; 

      if(expandedState) 
      { 
       CGFloat cellsFromTop = posFromTop/kExpandedCellHeight; 
       newDistance = cellsFromTop * kCollapsedCellHeight; 
      } 
      else 
      { 
       CGFloat cellsFromTop = posFromTop/kMGLCollapsedCellHeight; 
       newDistance = cellsFromTop * kMGLExpandedCellHeight; 
      } 
     } 

//reload section 
     [self.tableView setContentOffset:CGPointMake(0, newDistance) animated:YES]; 
     [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic]; 

, 그것은 흰색 깜박하고 그래서 고르지의와있는 tableView가 재로드시에 여전히 머물고있다처럼 보이지 않는다.

누구나 동일한 위치를 유지하면서 모든 셀의 높이를 부드럽게 애니 메이팅 할 수있는 방법이 있습니까?

+1

해결책을 찾았습니까? – sim

답변

0

첫 번째 축소 애니메이션을 수행하는 데 걸리는 시간을 알 수 있습니다. 정확히 1 초가 걸립니다. 그럼이 같은 것을 말할 수있을 것 같아요 :

[UIView animateWithDuration:1.0 animations:^{ 
    [self.tableView setContentOffset:CGPointMake(0, newDistance) animated:NO]; 
}]; 

이 당신의있는 tableView 현재 contentOffset에서 시작하고 원하는 contentOffset로 끝나는 1 초 동안 애니메이션을 수행합니다. 나는 결코 UITableViewRowAnimationAutomatic, 또는 그 문제에 대한 모든 tableView 애니메이션을 사용한 적이 있지만 어쩌면 당신은 다른 값을 시도 할 수도 있습니다.

실제로 무슨 뜻인지 아시면 사실 두 애니메이션을 같은 애니메이션에 맞출 수 있습니다. 또한 모든 기간을 제어 할 수 있습니다. 문제가 해결 있을지 나는 지금 그것을 테스트 할 수 없습니다 몰라,하지만은 다음과 같이 보일 것이다 :

[UIView animateWithDuration:1.0 animations:^{ 
    [self.tableView setContentOffset:CGPointMake(0, newDistance) animated:NO]; 
    [self.tableView setRowHeight:newHeight]; 
}]; 

나는 특정 방법이 실제로 존재한다는 의심을,하지만 난 당신이 얻을 확신 내가 무슨 말을하고 있는지, 거기에 비슷한 것이 있으면 그것을 발견 할 것입니다. 원래 통화에서 애니메이션 매개 변수로 nil 일 수도 있습니다.

(이 당신이 작동하지 않는 경우에 볼 수 있었다 beginUpdatesendUpdates라고 뭔가 또한,하지만 내가 그 높이를 변경할 수 있습니다 확실하지 않다)

+0

나는 UIView 애니메이션 시도했지만 동시에 높이를 전환하려면 해결하지 않았다. 그것은 좋은 생각이었다. – user1218464

+0

@ user1218464 두 번째 아이디어를 시도하여 동일한 애니메이션 시퀀스에서 스크롤과 높이를 애니메이션화 했습니까? 뿐만 아니라 높이? – Sti

+0

테이블에는 'setRowHeight'또는 이와 유사한 것이 없습니다.따라서 높이를 조정하려면 테이블/섹션을 업데이트/업데이트하거나 다시로드해야합니다. 그래서 애니메이션 안에 넣는 것은 불가능합니다. – user1218464

2

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation: UITableViewRowAnimationAutomatic]; 

를 교체하십시오

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

후자는 현재 셀을 가져 와서 크기를 업데이트합니다. 자동 애니메이션으로 섹션을 다시로드하는 것은 새로운 높이에서 새 셀을 생성하고 기존 셀과 새 셀 사이의 페이드 애니메이션을 사용하는 것 같았습니다.

+0

시작/종료 업데이트는 전환을 돕는 것처럼 보이지만 여전히 동일한 장소에 테이블을 유지하는 문제가 있기 때문에 아직 원활하지 않습니다. – user1218464

+0

테이블 뷰 업데이트 후에'setContentOffset :'호출을 시도하십시오. 문제는 콘텐츠 오프셋을 설정 한 후에 테이블이 콘텐츠 크기를 업데이트하는 것이므로 실제로 제대로 유지되지 않는 것일 수 있습니다. – ianyh

관련 문제