2016-10-30 1 views
0

행, 섹션 및 행 높이 수가 극적으로 변경되므로 UITableview의 데이터를 다시로드하고 있습니다. 전환을 부드럽게하기 위해 버튼을 탭할 때 아래 전환을 선택했습니다. reloadData 및/또는 내용 오프셋 코드를 애니메이션 블록 내에 배치하면 결과가 "hacky"/ "stuttering"됩니다. 애니메이션 전에보기 변경 사항을 배치하면 꿈처럼 작동합니다. 왜이 기능이 작동합니까? transitionWithView (iOS 10.1)의 버그있는 동작을 사용하고 있습니까? 이것이 어떻게 올바르게 이루어져야 하는가?UIView transitionWithView가 애니메이션 블록 외부에서 변경 사항을 사용할 때 부드러움

[self.tableView reloadData]; 
CGPoint bottomOffset = CGPointMake(0, [self.tableView contentSize].height + [self.tableView contentInset].bottom - self.tableView.frame.size.height); 
[self.tableView setContentOffset:bottomOffset animated:NO]; 

[UIView transitionWithView: self.tableView 
          duration: 0.35f 
          options: UIViewAnimationOptionTransitionCrossDissolve 
         animations: ^(void) 
         { 
         } 
         completion: nil]; 

답변

0

transitionWithView는 일반적으로 화면의 전체보기를 변경하는 데 사용되며 일부 부분에서는 변경 사항을 표시하지 않습니다. Like Apple says :

전환 애니메이션은 하나의보기 컨트롤러의 내용을 다른보기 내용으로 바꿉니다.

대부분의 경우 그렇게

, 간단한 애니메이션으로 작업이

[UIView animateWithDuration:(NSTimeInterval) animations:^(void)animations completion:^(BOOL finished)completion] 

를 사용하는 것이 좋습니다 또는도

[UIView beginAnimations:(nullable NSString *) context:(nullable void *)] 
//place your view changes here to animate it 
//...... 
[UIView commitAnimations] 

귀하의 의견을 애니메이션하는 또 다른 방법이있다 또한 방법이있다 해당 테이블 뷰는

[tableView insertRowsAtIndexPaths:(nonnull NSArray<NSIndexPath *> *) withRowAnimation:(UITableViewRowAnimation)] 

옵션을 사용하여 새 데이터를 tableView에 추가 할 수 있습니다. 기본적으로 테이블 뷰에 표시 할 개체 배열에 새 데이터를 추가 한 다음이 메서드를 호출하여 변경 한 내용을 표시합니다. 반면에, 당신은 그들이 모두 자신을 작동 할 수 있기 때문에 당신이 [있는 tableView reloadData]를 호출 할 필요는 없습니다 위의 두 경우에 다른 방법을

[tableView beginUpdates]; 
//make some changes 
[tableView endUpdates]; 

을 시도 할 수 있습니다 .

+0

답변 해 주셔서 감사합니다. 그러나 문제는 animateWithDuration이 원활하게 작동하지 않는다는 것입니다 (점프 업하고 소유하고있을 가능성이 있습니다. 왜냐하면 crossdisolve처럼 단순히 페이드 인하는 것이 아니라 콘텐츠 오프셋 때문입니다.) transitionWithView를 사용하고 뷰를 tableview로 설정하거나 컨트롤러보기, 애니메이션 블록에서 변경 사항을 제외 할 때 잘 작동합니다. 어떤 아이디어가 있습니까? – damcify

+0

@damcify는 새로운 접근법으로 편집했습니다. – valivaxa

관련 문제