Я реализую приложение с компоновкой столбцов в стиле Pinterest. И хотите, чтобы размер каждой ячейки был динамическим, соответствует размеру изображения.Размер обновления UICollectionView asyncly
Я использую SDWebImage для асинхронной загрузки изображения в ячейку, а затем недействительности макета коллекцииView. Однако, поскольку ячейки являются многоразовыми, и поэтому каждый раз, когда экран прокручивается вверх & вниз, макет становится недействительным и создается некоторая нежелательная анимация.
Вот мой код:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCellWithReuseIdentifier(self.identifier, forIndexPath: indexPath) as! MyCell
cell.imageView.sd_setImageWithURL(imageUrl, completed: { (image, error, _, _) -> Void in
UIView.animateWithDuration(0.3, animations: {() -> Void in
collectionView.collectionViewLayout.invalidateLayout()
})
})
return cell
}
Размер ячейки функции:
func collectionView(collectionView: UICollectionView!, layout collectionViewLayout: UICollectionViewLayout!, sizeForItemAtIndexPath indexPath: NSIndexPath!) -> CGSize {
var width = UIScreen.mainScreen().bounds.size.width/2 - 3
// create a cell size from the image size, and return the size
if let cell = collectionView.cellForItemAtIndexPath(indexPath) as? CraveCollectionViewCell{
if cell.imageView.image != nil {
let image = cell.imageView.image!
var height = image.size.height * width/image.size.width
let size = CGSize(width: width, height: height)
var height1 = size.height > 160 ? size.height : 160
return CGSize(width: width, height: height1)
}
}
return CGSize(width: width, height: 160)
}
}
Когда изображения получает нагрузку сначала SDWebImage, collectionView.collectionViewLayout.invalidateLayout()
называется и раскладка работает отлично.
После scolling collectionView.collectionViewLayout.invalidateLayout()
вызывается снова, и здесь возникает проблема.
Вы добавили эту анимацию: animateWithDuration, можете обойтись без анимации и проверить – Swati
@Swati благодарит за ваш комментарий. Макет все еще недействителен каждый раз во время прокрутки, все еще можно увидеть, как происходит рывок. Я хочу найти способ избавиться от него. – Zeyu