Применить sizeForItemAt только к одному collectionView - PullRequest
0 голосов
/ 06 июня 2019

Я использую sizeForItemAt, чтобы установить размер ячейки для ОДНОГО контроллера представления, но кажется, что мне нужно возвращать результат и для других CollectionViews, проблема в том, что у меня нет значения размера для других, так как это определено в раскадровке. Я пытаюсь это:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    if categorie_cv == collectionView {
        let size: CGSize = categorie[indexPath.row].size(withAttributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 17.0)])
        return CGSize(width: size.width + 40.0, height: categorie_cv.bounds.size.height)
    } else if collectionView == risultati {

        return THIS VALUE IS SET IN THE STORYBOARD 
    } else {
        return THIS VALUE IS SET IN THE STORYBOARD
    }
}

1 Ответ

0 голосов
/ 06 июня 2019

Нет, к сожалению, вы не можете сказать ему, чтобы он автоматически использовал внутренний размер элемента, полученного из его макета.

Однако, если ваш макет действительно позволил бы настроить внутренний размер не неоднозначно через AutoLayout/ это содержимое, вы можете позвонить UIView.intrinsicContentSize, возможно, смешивая с layoutIfNeeded вызовом.Я не уверен, что это решение работает на 100%.

Если бы я был вами, я бы искал не способ назначить делегата и реализовать sizeForItemAt, а скорее определить этот размер ТАКЖЕ в вопросахсама ячейка.

И, кстати, на самом деле, это немного "получится НЕ так, как вы ожидали", чтобы позволить ячейкам определять свой размер контента.Это может быть очень полезно и логично с UITableView, но вычисление макета в случае UICollectionView лучше определить с помощью более простого, расчетного подхода.

То есть, дешево вычислить ширину, равную половине ширины границ collectionView и равной высоте, - вместо того, чтобы позволить самому контенту свободно размещаться с использованием очень динамических правил сжатия контента и оценки приоритета ограничения.Как правило, наличие всех ячеек не имеет абсолютно ничего общего с точки зрения соотношения сторон, ширины ИЛИ высоты, как правило, приводит к нежелательным результатам.

...