2017-07-21 81 views
0

我有一个显示2个单元格的UICollectionView。每个单元格都有一个UIImageView。当显示单元格时,第一个单元格是正确的,但第二个单元格中的ImageView正在显示,就好像它在第三个单元格中一样。UICollectionView在单元格外渲染图像

enter image description here 代码:

var upgradeCollectionView: UICollectionView! 

lazy var upgradeView: UIView = { 

    ... //Add other views 

    let layout = UICollectionViewFlowLayout() 
    layout.sectionInset = UIEdgeInsets(top: 0, left: 1, bottom: 0, right: 1) 
    layout.minimumInteritemSpacing = 0 
    layout.minimumLineSpacing = 1 
    let itemSideSize = (self.view.frame.width - 5)/4 
    layout.itemSize = CGSize(width: itemSideSize, height: itemSideSize) 
    self.upgradeCollectionView = UICollectionView(frame: CGRect(x: 0, y: 44, width: newView.frame.width, height: newView.frame.height), collectionViewLayout: layout) 
    newView.addSubview(self.upgradeCollectionView) 
    self.upgradeCollectionView.register(CollUpgradeCell.self, forCellWithReuseIdentifier: "CollUpgradeCell") 
    self.upgradeCollectionView.delegate = self 
    self.upgradeCollectionView.dataSource = self 
    self.upgradeCollectionView.isHidden = true 
    self.upgradeCollectionView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) 
}   

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    availableUpgrades = [] 
    upgrades.forEach { (upgrade) in 
     if upgrade.isHidden == false{ 
      if upgrade.owned == false{ 
       availableUpgrades.append(upgrade) 
      } 
     } 
    } 

    availableUpgrades = availableUpgrades.sorted(by: { $0.cost < $1.cost }) 

    return availableUpgrades.count //Returns 2 
} 


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollUpgradeCell", for: indexPath) as! CollUpgradeCell 
    cell.resetCell() //Resets BG color, text label, and imageview.image = nil 

    let upgrade = availableUpgrades[indexPath.item] 

    cell.textLabel.text = String(upgrade.cost) 
    cell.imageView.image = upgrade.image 
    cell.backgroundColor = .green 

    return cell 
} 

class CollUpgradeCell: UICollectionViewCell { 

    var imageView = UIImageView() 
    var textLabel = UILabel(frame: CGRect(x: 30, y: 30, width: 50, height: 500)) 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     addSubview(textLabel) 
     addSubview(imageView) 
     imageView.frame = frame 
    } 
} 
+0

你的细胞。 imageView使用自动布局?你在使用约束吗? –

+0

一个建议无论你在做'resetCell()'你可以做'prepareForReuse()' –

+0

我已经编辑了显示如何在单元格中设置ImageView的问题 –

回答

2

这是你的问题,你需要为你的UIImageView的框架使用您的CollectionViewCell

override init(frame: CGRect) { 
     super.init(frame: frame) 
     addSubview(textLabel) 
     addSubview(imageView) 
     //imageView.frame = frame this is your problem source 
     imageView.frame = self.bounds 
    } 

希望的范围这有助于

+0

这个技巧。谢谢 –