UICollectionView渲染图像在单元格之外

时间:2017-07-21 01:57:25

标签: ios swift swift3 uicollectionview

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

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
    }
}

1 个答案:

答案 0 :(得分: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 } 框架
MainActivity extends AppCompatActivity  {
    MyListener listener = new MyListener();

    Button b = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        b = (Button)findViewById(R.id.button);

        b.setOnClickListener(new MyListener(MainActivity.this));
    }
}

希望这有帮助