2013-10-09 11 views
16

Tôi muốn tải lại UICollectionView bằng một số hoạt ảnh thú vị. Trong UITableView có một phương thức gọi là reloadSections:withRowAnimation. Nhưng trong UICollectionView chỉ có reloadSections.UICollectionView tải lạiCác bộ phận với hoạt ảnh

Tôi làm cách nào để tùy chỉnh hoạt ảnh tải lại? Tôi chắc chắn đã thấy điều này trong các ứng dụng trên App Store.

+0

thể trùng lặp của [UICollectionView thay đổi dữ liệu Animate] (http://stackoverflow.com/questions/13272315/uicollectionview-animate-data-change) – Vinzzz

Trả lời

27

Chỉ cần làm điều đó như thế:

[self.collectionView performBatchUpdates:^{ 
    [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]]; 
} completion:nil]; 
+1

Cảm ơn, nhưng nó vẫn hoạt hình với hoạt ảnh mờ dần ... – Sergey

+0

Sau đó, bạn phải lặn sâu hơn và viết '' 'UICollectionViewLayout''' của riêng bạn. Bạn không thể so sánh nó với UITableView, vì UICollectionView không chỉ là vấn đề hiển thị dữ liệu trong 1D (như UITableView) hay 2D (giống như với UICollectionViewFlowLayout). Bạn không bị giới hạn bởi bất kỳ thứ gì và do đó không có hình động nhỏ nào khác ngoài việc tích hợp sẵn. Không thể bố cục tùy chỉnh để sử dụng các hoạt ảnh khác nhau từ các ảnh động từ trên xuống/dưới/giữa vì hình động không thể được xác định trên toàn cầu !!! – Fab1n

1

Bài viết này ở đây là đáng đọc: http://victorlin.me/posts/2016/04/29/uicollectionview-invalid-number-of-items-crash-issue

TLDR:

Vì vậy, nó bật ra performBatchUpdates gọi collectionView (: numberOfItemsInSection :) đầu tiên trước khi gọi là đóng cửa cho biết số mục. Tiếp theo, nó gọi là đóng cửa, và cuối cùng, nó gọi collectionView (: numberOfItemsInSection :) một lần nữa để kiểm tra số. Và đây là nơi mà các ngoại lệ khẳng định được ném ra.

14

Swift 3 phiên bản:

collectionView.performBatchUpdates({ 
    let indexSet = IndexSet(integer: 0) 
    self.collectionView.reloadSections(indexSet) 
}, completion: nil) 
Các vấn đề liên quan