Как указать размер ячейки CollectionView? ⇐ IOS
-
Anonymous
Как указать размер ячейки CollectionView?
Мне нужно, чтобы размер ячейки представления коллекции менялся в зависимости от различных условий.
Это то, что я использую сейчас:
класс 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) ]) }
Мне нужно, чтобы размер ячейки представления коллекции менялся в зависимости от различных условий.
Это то, что я использую сейчас:
класс 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) ]) }
Мобильная версия