Как мне установить высоту ячеек в UICollectionView, равную высоте любого вида коллекции? Код ниже не работает, потому что высота просмотров коллекции не известна на данный момент, кажется, так как автоматическая компоновка возится со свойствами на этом этапе. Это приводит к тому, что высота ячеек выше, чем фактический вид коллекции.
Я добавлю 300 в награду за ответ, который решает это!
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSize(width: 100, height: collectionView.frame.size.height)
}
2015-12-16 18: 43: 53.643 My-app [1055: 434762] поведение ввода код здесьUICollectionViewFlowLayout не определен, потому что: 2015-12-16 18: 43: 53.643 My-app [1055: 434762] высота элемента должна быть меньше, чем высота UICollectionView минус секционные вставки сверху и снизу значения, минус верхние и нижние значения вставки содержимого. 2015-12-16 18: 43: 53.643 My-app [1055: 434762] Пожалуйста, проверьте значения, возвращаемые делегировать. 2015-12-16 18: 43: 53.644 My-app [1055: 434762] Соответствующие Экземпляр UICollectionViewFlowLayout, и он привязан к; layer =; contentOffset: {0, 0}; contentSize: {3087, 307} > макет коллекции:. 2015-12-16 18: 43: 53.644 My-app [1055: 434762] Сделать символическую точку останова в UICollectionViewFlowLayoutBreakForInvalidSizes, чтобы поймать это в отладчик.
Решение, которое работает на основе предложения hannads. Если есть лучшие способы, пожалуйста, дайте мне знать
Создал свойство с наблюдателем свойств.
var myCollectionViewHeight: CGFloat = 0.0 {
didSet {
if myCollectionViewHeight != oldValue {
myCollectionView.collectionViewLayout.invalidateLayout()
myCollectionView.collectionViewLayout.prepareLayout()
}
}
}
Переопределить этот метод (он называется несколько раз)
override func viewDidLayoutSubviews() {
myCollectionViewHeight = myCollectionView.bounds.size.height
}
Тогда у меня это в моем делегате:
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSize(width: 100, height: myCollectionViewHeight)
}