繁体   English   中英

UIImageView UICollectionView 单元格中的视图未调整为单元格宽度

[英]UIImageView view in UICollectionView cell is not resizing to cell width

我正在创建简单的 UICollectionView,每行单元格有 3 列。

我的单元格很简单——只有 UIImageView 拉伸到 4 个边:

class FollowerCell: UICollectionViewCell {
    
    static let reuseID = "FollowerCell"
    
    var avatarImageView:UIImageView!
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        configure()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    private func configure() {
        avatarImageView = UIImageView()
        addSubview(avatarImageView)
        
        contentView.layer.borderColor = UIColor.red.cgColor
        contentView.layer.cornerRadius = 5
        contentView.layer.borderWidth = 5
        
        avatarImageView.translatesAutoresizingMaskIntoConstraints = false
        
        NSLayoutConstraint.activate([
            avatarImageView.topAnchor.constraint(equalTo: contentView.topAnchor),
            avatarImageView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
            avatarImageView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
            avatarImageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor)
        ])
        
        avatarImageView.image = UIImage(named: "avatar-placeholder")
    }
    
}

在 ViewController 中,我通过实现UICollectionViewDelegateFlowLayout 的方法sizeForItemAt 来定义单元格的宽度:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        
        let width                       = self.view.bounds.width
        let itemWidth                   = width / 3
        
        return CGSize(width: itemWidth, height: itemWidth)
}

我的结果很奇怪——我的 UIImageView 大小忽略了单元格大小(红色矩形):

在此处输入图像描述

Github: https://github.com/afirthes/TryUIViewCollection

当我尝试在 storyboard 中做同样的事情时,它似乎运作良好:

在此处输入图像描述

以编程方式创建 UICollectionView 时我缺少什么?

我正在学习 2021 年的教程,它工作得很好,似乎在 XCode 11 中发生了一些变化。

主要变化

contentView.addSubview(avatarImageView)

完整 class

import UIKit

class FollowerCell: UICollectionViewCell {
    static let reuseID = "FollowerCell"
    var avatarImageView:UIImageView!
    override init(frame: CGRect) {
        super.init(frame: frame)
        configure()
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    private func configure() {
        avatarImageView = UIImageView()
        contentView.addSubview(avatarImageView)
        contentView.layer.borderColor = UIColor.red.cgColor
        contentView.layer.cornerRadius = 5
        contentView.layer.borderWidth = 5
        avatarImageView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            avatarImageView.topAnchor.constraint(equalTo: contentView.topAnchor),
            avatarImageView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
            avatarImageView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
            avatarImageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor)
        ])
        avatarImageView.image = UIImage(named: "avatar-placeholder")
    }
}

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM