2013-10-27 3 views
13

업데이트 : 이제 iOS 8.0 이상에서 수정되었습니다. 자세한 내용은 내 대답을 참조하십시오.UITableView의 마지막 행을 삭제할 때의 애니메이션 문제

iOS 7 UITableView를 사용하여 행을 스 와이프 할 수 있습니다. 함께

tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

: 나는에서 삭제를 처리하고있어

[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop]; 

모든 행은 테이블의 마지막을 제외하고, 올바른 애니메이션 삭제됩니다. 사용자가 삭제 버튼을 표시하기 위해 스 와이프 한 다음 탭하면 셀이 화면 왼쪽에서 완전히 벗어나지 만 갑자기 사라지기 전에 몇 분의 1 초 동안 삭제 버튼이있는 흰색 셀이 뒤에 있습니다. 이것이 모든 세포에서 일어나고있는 것처럼 보이지만, 다른 모든 세포는 그 위로 아래로 뻗은 행이 있습니다.

문제가되는 행이 테이블의 유일한 행인 경우에도이 문제가 발생합니다. 여기서 행 대신 전체 섹션이 삭제됩니다. 섹션 헤더가 망각으로 올라가지만 삭제 버튼이있는 흰색 셀이 약간 붙어 있습니다.

이 마지막 셀에 다른 사람이 수행하는 것과 동일한 UITableViewRowAnimationTop 애니메이션이 있어야합니다. 무슨 일이 벌어지고 있는지에 대한 아이디어가 있습니까?

+3

이 똑같은 문제가 발생했습니다. 나는 iOS 7의 UITableView 버그 일 뿐이라고 확신한다. – patr1ck

+0

UPDATE에 감사드립니다. 대신 대답으로 업데이트를 추가 할 수 있습니까? 당신의 질문에 충분히 답하면 당신도 그것을 받아 들일 수 있습니다. 더 나은 답변을 언제나 삽입 할 수 있으며 그 답을 수락 할 수도 있습니다. –

답변

4

업데이트 :이 버그는 iOS 8에서 수정되었습니다. 이제 최종 셀 삭제가 왼쪽으로 이동하고 삭제 버튼이 위로 이동하고 배경이 선명 해집니다 (애니메이션 이후에 더 이상 흰색 영역이 사라지지 않음). 완전한). 아래 그림과 같이 iOS 8을 실행할 때 아래의 iOS 7 수정이 필요합니다.

iOS 7 수정 : 충분히 큰 섹션 헤더보기가있는 다른 섹션을 테이블 끝에 추가하여이 문제를 해결할 수있었습니다. 이 헤더보기는 표 하단의 빈 영역과 모양이 같으므로 표제가 있음을 볼 수 없습니다. 테이블의 마지막 행이 삭제되면이 빈 섹션 헤더가 위아래로 슬라이드하여 거기에 붙어있는 삭제 버튼을 숨 깁니다. 이것은 약간의 해킹이지만 테이블보기 버그 인 것처럼 보입니다.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    ... 

    CGRect frame = [self.tableView rectForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; 
    UIView *view = [[UIView alloc] initWithFrame:frame]; 
    view.backgroundColor = self.tableView.backgroundColor; 
    self.tableView.tableFooterView = view; 
} 

이 코드는 UITableView을 들고 뷰 컨트롤러로 전환 :

+0

현재 이것은 나에게 유일한 제정신의 해결책입니다. 유일한주의 사항은 셀에 투명한 배경을 사용할 수 없다는 것입니다. – Eonil

0

테이블 뷰의 마지막 행 아래에 항상 빈 행을 유지하는 것이 좋다고 생각합니다. 그것은 트릭을 할 것입니다.

1

프랭크 리 (Frank Li)가 언급 한 비어있는 행 트릭의 대안으로, 나는 마지막 행의 삭제를 특수하게 처리하여이 추악한 글리치를 해결했습니다. 셀을 애니메이션으로 애니 메이팅하는 대신 간단히 테이블 뷰에서 -reloadData를 호출하십시오.

애니메이션이 생기지는 않지만 테이블 뷰가 손상되지 않도록 글리치가 표시되지 않습니다. 보람있는 상충 관계.

0

는 또한 UITableView.tableFooterView 속성을 사용할 수 있습니다.

  • 코드는 ARC로 가정합니다.
  • 테이블에 배경 이미지를 사용하면 이야기가 달라집니다.
  • 코드는 "if (iOS> 7)"절로 둘러 쌀 수 있습니다.
+1

이 솔루션은 일반적으로 빈 테이블에 표시되는 행을 제거합니다. 테이블 뷰의 주식 모양을 유지하는 솔루션이 바람직합니다. –

0

내 솔루션은 단순히 삭제 된 셀을 숨김으로써 깨진 애니메이션을 비활성화하는 것이 었습니다.

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.hidden = YES; 
} 
관련 문제