UICollectionViewCell imageView不滚动就不会加载

问题描述

我的collectionView中有一些垂直放置的单元格。
每个单元格的左侧都有一个图像,该图像可以正确加载。
但是当我在屏幕上打开右上角的圆角后,打开屏幕时不会自动加载图像。
这是cellForItemAt

中正在调用方法
func setAvatarImage(imageName: String) {
        self.addSubview(avatarImageView)
        layoutIfNeeded()
        avatarImageView.layer.roundCorners(corners: [.topRight],radius: UIDevice.current.userInterfaceIdiom == .pad ? 85 : 40)
        avatarImageView.contentMode = .scaleAspectFit
        avatarImageView.image = UIImage(named: imageName)
        avatarImageView.snp.makeConstraints { (make) in
            make.height.equalToSuperview()
            make.width.equalToSuperview().multipliedBy(0.5)
            make.left.equalToSuperview()
        }
    }

这也是roundCorners方法的CALayer扩展,在我应用程序中的每个元素上均能完美运行。同样在这里它可以正常工作,但是如果不在collectionView中向上和向下滚动,就不会加载图像:

func roundCorners(corners: UIRectCorner,radius: CGFloat,borderWidth: CGFloat = 0,borderColor: UIColor = .clear) {
        let maskPath = UIBezierPath(
            roundedRect: bounds,byRoundingCorners: corners,cornerRadii: CGSize(width: radius,height: radius)
        )
        
        let shape = CAShapeLayer()
        shape.path = maskPath.cgPath
        
        mask = shape

        let borderLayer = CAShapeLayer()
        borderLayer.path = maskPath.cgPath
        borderLayer.linewidth = borderWidth
        borderLayer.strokeColor = borderColor.cgColor
        borderLayer.fillColor = UIColor.clear.cgColor
        borderLayer.frame = self.bounds
        addSublayer(borderLayer)
    }

解决方法

添加以下内容即可解决:

layoutIfNeeded()