2014-05-17 4 views
12

UICollectionView의 reloadData 메소드를 호출하면 표시되는 모든 셀이 깜박입니다. 그 이유는 모든 보이는 세포의 레크 리 에이션, UITableView 에 보이는 셀을 반환하는 동안 발견 - tableView : cellForRowAtIndexPath : 메서드는 데이터를 다시로드 후.UICollection view reloadData가 표시 셀을 다시 작성합니다.

그래서 UICollectionView에서 보이는 셀의 레크 리 에이션을 피할 수 있습니다.

답변

4

테이블 또는 컬렉션보기에서 reloadData을 호출하면 가능한 모든 셀을 다시 만들고 (보이는 경우) 모든 셀을 표시하고 행/항목 수 및 뷰 내용 높이에 대한 정보를 새로 고칩니다. 따라서 애니메이션으로 인해 항상 깜박 거립니다.

모든 것이 바로 업데이트되었는지 reloadData를 호출하지 않는,

애니메이션을 방지하기 위해 ... 사용자에게 알리기 위해 의도적으로 설계된 동작입니다. 대신 visibleCells을 사용하여 현재 화면에있는 모든 셀을 가져 와서 내용을 직접 업데이트하십시오. 셀이 여전히 볼 경우 reloadData를 호출 할 때,이 컬렉션보기로 https://github.com/ba01ei/PSTImprovedCollectionView

을 시도 할 수 있습니다

+0

는'나는 이전에로드 된 데이터를 볼 수 세포를 얻을. 예를 들어, imageView가 있고 이미지가 변경되지 않으면 업데이트하지 않으므로 깜박임을 피할 수 있습니다. 그러나 reloadData 후의 콜렉션보기에서 완전히 새로운 셀을 얻습니다. 이전에로드 된 데이터가있는 셀은 현재 보이지 않습니다. – abagmut

+0

재사용 할 수있는 셀이 테이블 또는 컬렉션보기에만 해당되는 것은 아니며, 수행 한 스크롤이나 이전에 수행 한 재로드와 더 관련이 있습니다. 그리고 당신은 항상 셀을 재구성해야합니다 - 이전에 어떤 행을 사용했는지 어떻게 알 수 있습니까? – Wain

+0

collectionView가 스크롤되지 않을 때 reloadData를 호출합니다. 이전에 어떤 행을 사용했는지 알 필요가 없습니다. 현재 셀에로드 된 이미지의 이미지 이름 만 저장하고 다시로드 한 후에 일치하는 경우 (셀 데이터 소스가 변경되지 않으면 tableView의 경우 true) 아무 작업도 수행하지 않습니다. – abagmut

1

가, 같은 셀이 대기열에서 반환됩니다 (당신은 셀에 부착 된 데이터 모델을 확인할 수 있습니다

[myCollectionView reloadItemsAtIndexPaths:[myCollectionView indexPathsForVisibleItems]];

6

) 다시 렌더링할지 여부를 결정 스위프트 버전 :

if let indexPath = collectionView?.indexPathsForVisibleItems { 
    collectionView?.reloadItems(at: indexPath) 
} 
-1

: 그리고 당신은 reloadData 동안 플래시가 볼 발생하지 않습니다 가시 세포를 다시로드해야

-1

이 시도 : cellForRowAtIndexPath : 내가있는 tableView`에있는 tableView에 대한 reloadData를 호출 할 때

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
    [weakSelf.collectionView reloadData]; 
}); 
관련 문제