为什么只更新了第一个单元格中的图像,而未更新uicollectionview中的其余单元格。 ios swift

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么只更新了第一个单元格中的图像,而未更新uicollectionview中的其余单元格。 ios swift相关的知识,希望对你有一定的参考价值。

我想在顶部栏上找到3个图标。

enter image description here

  import UIKit

  class SectionHeader: UICollectionReusableView {

private let telButtonCellId = "TelButtonCell"
private let searchBarCellId = "SearchBarCell"
private let notificationButtonCellId = "NotificationButtonCell"

// MARK: - Properties

@IBOutlet weak var collectionView: UICollectionView!

// MARK: - Initialization



override func awakeFromNib() {
    super.awakeFromNib()
    self.collectionView.register(UINib(nibName:notificationButtonCellId, bundle: nil), forCellWithReuseIdentifier: notificationButtonCellId)

    self.collectionView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.width*0.2) // this is need to set the size of the collection view
    self.collectionView.delegate = self
    self.collectionView.dataSource = self

}


extension SectionHeader : UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: notificationButtonCellId, for: indexPath) as! NotificationButtonCell
    var image = UIImage(named: "globe")
    cell.imageView.image=image?.addImagePaddingShift(x: 20 , y: 20,shiftX: 0, shiftY: 10)
    cell.imageView.contentMode = .scaleAspectFit
    cell.imageView.bounds=cell.bounds
    cell.imageView.center = cell.center;
    cell.backgroundColor = UIColor.lightGray

    return cell
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 3
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let frameWidth = UIScreen.main.bounds.width
    let frameHeight = UIScreen.main.bounds.width*0.2

    return CGSize(width: frameWidth*0.15, height: frameHeight*1.0)
}

因此,只有第一个单元格才会显示地球。即使我可以改变背景颜色,其余的2个单元格都是空的。

SectionHeader是一个笔尖enter image description here

答案

imageView是单元格的子视图,需要与我看到的大小一致。因此它需要将其框架(其相对于其超视图坐标系的位置 - 单元格)设置为具有原点(0,0)的单元格的高度和宽度。细胞的边界提供了这些尺寸,所以答案可以是

cell.imageView.frame = cell.bounds

或更好

cell.imageView.frame = CGRect(x: 0, y: 0, width: cell.frame.width, height: cell.frame.height)

以上是关于为什么只更新了第一个单元格中的图像,而未更新uicollectionview中的其余单元格。 ios swift的主要内容,如果未能解决你的问题,请参考以下文章

如何在 cellforrowatindexpath 之后更新自定义表格单元格中的 UIButton 图像?

如何快速更新消息 CollectionView 单元格中的数据?

将手势识别器添加到表格单元格中的图像视图

如何在可重用的 tableView 单元格中更新 UITextfield 中的文本值,每个单元格中的值不同

在具有透明度的 UITableView 单元格中更新 UIImageView

如何更新 TableView 静态单元格中的数据?