UICollectionViewCompositionalLayout центральные элементы в группе - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть представление коллекции с использованием UICollectionViewCompositionalLayout. Это рендеринг 8 ячеек в сетке из двух столбцов. Ячейки должны саморазмеряться в соответствии с их содержанием, которое может варьироваться по длине.

Вот что у меня есть:

Screenshot from the View Hierarchy Debugger

Проблема здесь находится на второй ячейке (вверху справа). Он имеет правильный размер, но выровнен по верхнему краю, а не центрирован внутри своей группы. И это выглядит плохо.

Итак, мой вопрос: Как выровнять элементы по центру их группы?

Для справки, вот мой код компоновки:

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)
    ])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...