Представление коллекции, Охватывающее Метку Предыдущего Представления содержимого — Swift

#swift #xcode #uicollectionview

Вопрос:

У меня есть представление коллекции, в котором отображаются изображения. Под изображением есть этикетка, на которой указано, что это за фотография. Моя проблема в том, что, когда представление коллекции попадает во вторую строку, изображения во второй строке закрывают метки для изображений в верхней строке. Как я могу это исправить?

Спасибо!

Мой код:

 private func collectionViewLayout() -> UICollectionViewLayout {
        let layout = UICollectionViewFlowLayout()
        let cellWidthHeightConstant: CGFloat = UIScreen.main.bounds.width * 0.2
        layout.sectionInset = UIEdgeInsets(top: 50,
                                           left: 10,
                                           bottom: 0,
                                           right: 10)
        layout.scrollDirection = .vertical
        layout.minimumInteritemSpacing = 0
        layout.itemSize = CGSize(width: cellWidthHeightConstant, height: cellWidthHeightConstant)
        
        return layout
    }
 
 fileprivate let bg: UIImageView = {
        let iv = UIImageView()
        iv.translatesAutoresizingMaskIntoConstraints = false
        iv.contentMode = .scaleAspectFill
        iv.clipsToBounds = true
        iv.layer.cornerRadius = 12
        return iv
    }()
    
    fileprivate let lbl: UILabel = {
        let label = UILabel(frame: .zero)
        label.textAlignment = .center
        label.translatesAutoresizingMaskIntoConstraints = false
        label.textColor = .black
        label.font = UIFont(name: label.font.fontName, size: 15)
        label.numberOfLines = 0
        return label
    }()
    
    private enum Constants {
        static let imageHeight: CGFloat = 80.0
        static let verticalSpacing: CGFloat = 82.0
        static let horizontalPadding: CGFloat = 8.0
        static let profileDescriptionVerticalPadding: CGFloat = 8.0
    }
    
    override init(frame: CGRect) {
        super.init(frame: .zero)
        contentView.addSubview(bg)
        contentView.addSubview(lbl)
        
        bg.leadingAnchor.constraint(equalTo: contentView.leadingAnchor).isActive = true
        bg.trailingAnchor.constraint(equalTo: contentView.trailingAnchor).isActive = true
        bg.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true
        bg.heightAnchor.constraint(equalToConstant: Constants.imageHeight).isActive = true
        
        lbl.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: Constants.horizontalPadding).isActive = true
        lbl.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -Constants.horizontalPadding).isActive = true
        lbl.topAnchor.constraint(equalTo: bg.bottomAnchor, constant: Constants.profileDescriptionVerticalPadding).isActive = true
    }
 

введите описание изображения здесь

Комментарии:

1. Если вы используете UICollectionViewFlowLayout , сделайте the layout.itemSize.height больше

2. Похоже, это не работает. Я обновил свой пост, добавив больше кода.

3. layout.itemSize = CGSize(width: cellWidthHeightConstant, height: cellWidthHeightConstant * 1.6)