如何在UICollectionView单元格中获取UIImageView的帧大小

时间:2018-06-17 11:51:46

标签: swift uicollectionview uiimageview uicollectionviewcell

我正在尝试在UIImageView内获得UICollectionViewCell的帧大小。我目前尝试使用thumbnailImageView.frame.size实现此目的,但无论我在何处调用此方法,都会返回(0.0, 0.0)

我想要这样做的原因是在图像视图内围绕图像的边缘,但是当我使用.scaleAspectFit时,我需要知道框架大小和图像大小才能正确地围绕角落。< / p>

以下是细胞类:

class SomeCollectionViewCell: UICollectionViewCell {

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupViews()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    let thumbnailImageView: UIImageView = {
        let imageView = UIImageView()
        imageView.contentMode = .scaleAspectFit
        return imageView
    }()

    private func setLabel(label: UILabel, textSize: CGFloat = 15.0, textColour: UIColor = UIColor.black) -> UILabel {
        label.textColor = textColour
        label.textAlignment = .center
        label.font = label.font.withSize(textSize)
        return label
    }

    var firstLabel: UILabel = UILabel()
    var secondLabel: UILabel = UILabel()
    var thirdLabel: UILabel = UILabel()

    func setupViews() {
        firstLabel = setLabel(label: firstLabel)
        secondLabel = setLabel(label: secondLabel)
        thirdLabel = setLabel(label: thirdLabel)

        addSubview(thumbnailImageView)
        addSubview(firstLabel)
        addSubview(secondLabel)
        addSubview(thirdLabel)

        addConstraintWithFormat(format: "V:|-25-[v0(125)]-[v1(16)]-[v2(16)]-[v3(17)]-25-|", views: thumbnailImageView, firstLabel, secondLabel, thirdLabel)
        addConstraintWithFormat(format: "H:|[v0]|", views: thumbnailImageView)
        addConstraintWithFormat(format: "H:|[v0]|", views: firstLabel)
        addConstraintWithFormat(format: "H:|[v0]|", views: secondLabel)
        addConstraintWithFormat(format: "H:|[v0]|", views: thirdLabel)

    }

}

extension UIView {
    func addConstraintWithFormat(format: String, views: UIView...) -> Void {
        var viewDictionary = [String : UIView]()
        for (index, view) in views.enumerated() {
            let key = "v\(index)"
            viewDictionary[key] = view
            view.translatesAutoresizingMaskIntoConstraints = false
        }
        NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: format, options: NSLayoutFormatOptions(), metrics: nil, views: viewDictionary))
    }
}

3 个答案:

答案 0 :(得分:1)

因此,解决此问题的方法是使用此方法:

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    }

此方法用于告诉委托人指定的单元格即将在集合视图中显示,并且在这一点上,它已被赋予边界。

答案 1 :(得分:0)

也许这就是你想要的,试试吧:

print(cell.photo?.image.size)

答案 2 :(得分:0)

再打印一次(cell.frame.size)