Проблема размера динамической ширины в ячейке UICollectionView - PullRequest
0 голосов
/ 22 октября 2018

Я динамически устанавливаю ширину каждой ячейки UICollectionView в соответствии с текстом внутри нее.Проблема заключается в том, что большую часть времени размер width является правильным, но иногда размер ячейки не является правильным.

Это строки, которые я отображаю в ячейке

let tabs = ["1st tab", "Second Tab Second", "Third Tab", "4th Tab", "A"]

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

    let text = tabs[indexPath.row]

    let font = UIFont.systemFont(ofSize: 21, weight: UIFont.Weight.regular)
    let attributes = font != nil ? [NSAttributedString.Key.font: font] : [:]
    let width = text.size(withAttributes: attributes).width

    return CGSize(width: width + 16+16+16+35, height: self.menuBarColView.frame.height)

}

Это правильно отображается 1-й,второй, третий и 5-й, но размер 4-й ячейки неправильный.Это вывод.

enter image description here

Скажите, пожалуйста, в чем проблема?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Я не мог видеть изображения причин моего VPN и вижу, что вы устранили проблему, однако я хочу кое-что добавить. Если ваши ячейки используют автоматическое расположение и имеют ограничения, вам также необходимо рассчитать и изменить их.

0 голосов
/ 22 октября 2018

Контрольный список ячеек представления Собственного размера:

  • Установите estimated item size в любое значение, кроме .zero.Лучше всего работает, если вы установите его (1,1)

пример:

(collectionView?.collectionViewLayout as? UICollectionViewFlowLayout)?.estimatedItemSize = CGSize(width: 1, height: 1)
  • Расположите содержимое ячейки и проверьте, работает ли оно, если изменяется масштабируемое содержимое.
  • Возвращает фактический размер, если вы можете рассчитать его без потери производительности
  • Двойная проверка, чтобы уменьшить количество повторяющихся кодов и размер кэша.
...