В моем приложении у меня есть представление коллекции с ячейками, автоматически меняющими размеры по горизонтали.Вот некоторый код:
// called in viewDidLoad()
private func setupCollectionView() {
let cellNib = UINib(nibName: SomeCell.nibName, bundle: nil)
collectionView.register(cellNib, forCellWithReuseIdentifier: SomeCell.reuseIdentifier)
guard let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout else { return }
flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
flowLayout.itemSize = UICollectionViewFlowLayout.automaticSize
}
Ячейка имеет 1 представление, которое имеет ограничение по высоте.Это представление подпредставляет метку, которая ограничена 2 строками и не ограничена шириной.Идея здесь состоит в том, чтобы позволить label вычислять свой собственный текст подгонки ширины в 2 строки.
Чтобы сделать эту работу, я добавил следующий код в класс ячеек:
override func awakeFromNib() {
super.awakeFromNib()
contentView.translatesAutoresizingMaskIntoConstraints = false
contentView.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
contentView.rightAnchor.constraint(equalTo: rightAnchor).isActive = true
contentView.topAnchor.constraint(equalTo: topAnchor).isActive = true
contentView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
}
Теперь это работает отлично.Ячейки автоматически меняются, scrollView выполняет горизонтальную прокрутку и т. Д. Пока я не вызову reloadData()
хотя бы один раз.Тогда ячейки имеют размер 50x50 и больше никогда не меняются автоматически, пока я не покину экран и не вернусь снова.
У вас есть идеи, почему это происходит?