Я сейчас строю UICollectionView
с пользовательским макетом.При переопределении функции Prepare в классе макета я должен вычислить высоту каждой ячейки.Все ячейки должны иметь динамические высоты, содержащие UIImage
и в зависимости от содержимого несколько UILabel
с.Это действительно лучший способ иметь делегата в UIViewController
и вычислять высоту, создавая каждый объект в ячейке и возвращая его высоту?Пример кода ниже - это пример, который я изменил с raywenderlich.com
.
Спасибо за понимание
func collectionView(_ collectionView:UICollectionView, heightForPhotoAtIndexPath indexPath:IndexPath, withWidth columnWidth:CGFloat) -> CGFloat {
let originalHeight = photos[indexPath.item].image.size.height
let originalWidth = photos[indexPath.item].image.size.width
let percent = columnWidth / originalWidth
let photoHeight = originalHeight * percent
let captionLabel = UILabel(frame: CGRect(x: 0, y: 0, width: columnWidth, height: 0))
captionLabel.font = UIFont(name: "AvenirNext-DemiBold", size: 12.0)
captionLabel.text = photos[indexPath.item].caption
captionLabel.sizeToFit()
let captionLabelHeight = captionLabel.frame.size.height
let commentLabel = UILabel(frame: CGRect(x: 0, y: 0, width: columnWidth, height: 0))
commentLabel.font = UIFont(name: "AvenirNext-Regular", size: 10.0)
commentLabel.text = photos[indexPath.item].comment
commentLabel.sizeToFit()
let commentLabelHeight = commentLabel.frame.size.height
return photoHeight + captionLabelHeight + commentLabelHeight + 20
}