Как указать размер ячейки CollectionView?IOS

Программируем под IOS
Anonymous
Как указать размер ячейки CollectionView?

Сообщение Anonymous »


Мне нужно, чтобы размер ячейки представления коллекции менялся в зависимости от различных условий.

Это то, что я использую сейчас:

класс CustomTabView: UIView { ... коллекция функцийView( _ CollectionView: UICollectionView, коллекция макетовViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath ) -> CGSize { ВычислитьНеедедИтемСизе() } func CalculateNeededItemSize() -> CGSize { если tabsList.count > Constant.maximumFullscreenTabsCount { вернуть UICollectionViewFlowLayout.automaticSize } еще { вернуть CGSize (ширина: defineItemWidthForFullscreen(), высота: кадр.высота) } } func defineItemWidthForFullscreen() -> CGFloat { return UIScreen.main.bounds.width/CGFloat(tabsList.count) } Когда я указываю эту строку кода return UICollectionViewFlowLayout.automaticSize с некоторым тестовым блоком, она работает нормально. Но в противном случае я получаю фатальную ошибку:

Поток 1: «UICollectionViewLayoutAttributes: -setFrame: требуются конечные координаты - {{0, -inf} , {1.7976931348623157e+308, 1.7976931348623157e+308}}" Кроме того, когда я указываю эту строку 'layout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize' без метода sizeForItemAt это работает, но мне просто нужно, чтобы моя ячейка имела другой размер в зависимости от условия.

Ячейка представления коллекции содержит метку, и ее ширину следует настроить в соответствии с текстовой строкой:
частная ленивая var titleLabel: UILabel = { пусть метка = UILabel() label.translatesAutoresizingMaskIntoConstraints = false label.numberOfLines = 1 label.textAlignment = .center label.textColor = .white label.font = UIFont.systemFont(ofSize: Constant.titleFontSize, вес: .medium) возвратная этикетка }() функция setupView() { contentView.addSubview(titleLabel) NSLayoutConstraint.activate([ titleLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, константа: 15), titleLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor,constant: -15), titleLabel.centerYAnchor.constraint(equalTo: contentView.centerYAnchor) ]) }

Вернуться в «IOS»