uicollectionview - 在已设置的图像 swift 4 上加载图像的问题
问题描述
我在 cellForItemAtIndexPath 中遇到问题,我将图像设置为我的单元格的 UIButton 但每次滚动 collectionView 的单元格时,它都会一次又一次地将图像放置在已经设置的图像之上。我可以说是因为图像的阴影越来越厚。我正在从该快速文件中创建的图像文字数组中提取图像,并且正在加载正确的图像,因此那里没有问题。我确信这对大多数人来说是一个简单的解决方法,但我似乎无法在任何地方找到答案。
我的 cellForItemAtIndexPath 函数的图像
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! HomeViewCell
collectionView.bounces = false
let imageNumber = indexPath.item
let collectionImage: UIButton = {
let image = UIButton()
image.setImage(collectionImageArray[imageNumber].withRenderingMode(.alwaysOriginal), for: .normal)
image.contentMode = .scaleAspectFit
image.addTarget(self, action: #selector(handleCollectionTap), for: .touchUpInside)
return image
}()
collectionImage.imageView?.image = collectionImageArray[imageNumber]
cell.addSubview(collectionImage)
collectionImage.anchor(top: nil, left: nil, bottom: nil, right: nil, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)
collectionImage.centerXAnchor.constraint(equalTo: cell.centerXAnchor).isActive = true
collectionImage.centerYAnchor.constraint(equalTo: cell.centerYAnchor).isActive = true
print(imageNumber)
return cell
}
解决方案
如果其他人遇到这个问题(或者也许我是唯一一个愚蠢的人),问题是我应该创建我的 UIButton,添加子视图,并将其限制在单元格类中,并从 cellForItem AtindexPath 方法设置像这样的图像和目标处理程序。
class HomeViewCell: UICollectionViewCell {
let collectionImage: UIButton = {
let image = UIButton(type: .custom)
image.contentMode = .scaleAspectFit
return image
}()
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(collectionImage)
collectionImage.anchor(top: nil, left: nil, bottom: nil, right: nil, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)
collectionImage.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
collectionImage.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! HomeViewCell
collectionView.bounces = false
let imageNumber = indexPath.item
let image = collectionImageArray[imageNumber].withRenderingMode(.alwaysOriginal)
cell.collectionImage.setImage(image, for: .normal)
cell.collectionImage.addTarget(self, action: #selector(handleCollectionTap), for: .touchUpInside)
print(imageNumber)
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: view.frame.width, height: view.frame.height)
}
@objc func handleCollectionTap() {
let layout = UICollectionViewFlowLayout()
let cardViewer = CardViewerController(collectionViewLayout: layout)
present(cardViewer, animated: true, completion: nil)
}
现在一切都很顺利!:)
推荐阅读
- c++ - 为什么我在这个 Karatsuba 乘法中出现逻辑错误?
- react-native - animatable 不断使视图增长
- fluentvalidation - 如何使用 FluentValidation 验证集合中的不同类型?
- python - 如何在不将多个标题副本创建到行中的情况下附加到 csv 文件?
- delphi - 如何通过 ScanLine 复制灰度位图
- groovy - groovy 遍历键和值列表
- tsql - 按分区准确排序日期名称
- linux - Crontab - *、*/1 和 0-59/1 之间的差异
- vb.net - 如何获取在 Windows.Forms PictureBox.Image 中查看的图像的原始大小
- r - 过滤具有多个条件的data.frame而不写出它们