У меня есть представление коллекции с использованием UICollectionViewCompositionalLayout
. Это рендеринг 8 ячеек в сетке из двух столбцов. Ячейки должны саморазмеряться в соответствии с их содержанием, которое может варьироваться по длине.
Вот что у меня есть:
Проблема здесь находится на второй ячейке (вверху справа). Он имеет правильный размер, но выровнен по верхнему краю, а не центрирован внутри своей группы. И это выглядит плохо.
Итак, мой вопрос: Как выровнять элементы по центру их группы?
Для справки, вот мой код компоновки:
private lazy var layout: UICollectionViewCompositionalLayout = {
let spacing: CGFloat = 10
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1),
heightDimension: .estimated(60))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1),
heightDimension: .estimated(60))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitem: item, count: 2)
group.interItemSpacing = .fixed(spacing)
let section = NSCollectionLayoutSection(group: group)
section.interGroupSpacing = spacing
return UICollectionViewCompositionalLayout(section: section)
}()
А вот ограничения ячейки:
private lazy var imageView: UIImageView = {
let imageView = UIImageView()
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.contentMode = .scaleAspectFit
imageView.clipsToBounds = true
return imageView
}()
private lazy var descriptionLabel: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.font = UIFont.preferredFont(forTextStyle: .caption1)
label.textColor = .label
label.textAlignment = NSTextAlignment.left
label.numberOfLines = 0
return label
}()
private func setup() {
contentView.addSubview(imageView)
contentView.addSubview(descriptionLabel)
NSLayoutConstraint.activate([
imageView.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor),
imageView.topAnchor.constraint(greaterThanOrEqualTo: contentView.layoutMarginsGuide.topAnchor),
imageView.bottomAnchor.constraint(lessThanOrEqualTo: contentView.layoutMarginsGuide.bottomAnchor),
imageView.centerYAnchor.constraint(equalTo: contentView.centerYAnchor),
imageView.heightAnchor.constraint(equalTo: imageView.widthAnchor),
imageView.heightAnchor.constraint(equalToConstant: 33),
descriptionLabel.leadingAnchor.constraint(equalToSystemSpacingAfter: imageView.trailingAnchor, multiplier: 1),
descriptionLabel.centerYAnchor.constraint(equalTo: imageView.centerYAnchor),
descriptionLabel.topAnchor.constraint(equalTo: contentView.layoutMarginsGuide.topAnchor),
descriptionLabel.bottomAnchor.constraint(lessThanOrEqualTo: contentView.layoutMarginsGuide.bottomAnchor),
descriptionLabel.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor)
])
}