UICollectionView中的UIImageView无法正确绘制

时间:2017-08-01 17:06:41

标签: ios swift uiimageview uicollectionview

我有一个应用程序,屏幕分为四个相同的单元格。每个单元格都有图像,标签和颜色。我试图添加图像,但由于某种原因,只有第一个单元格中的图像有效。

现在看起来像这样:enter image description here

这是我的代码: 在ViewController.swift中:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    colorArray += [UIColor.red, UIColor.blue, UIColor.green, UIColor.yellow]

    pictureArray += [UIImage(named: "budget")!, UIImage(named: "journey")!,
                     UIImage(named: "learn")!, UIImage(named: "settings")!]

    titleArray += ["Budget", "Journey", "Learn", "Settings"]
}

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    return 4
}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as UICollectionViewCell


    // Set cell properties
    cell.backgroundColor = colorArray[indexPath.row]

    let imageview:UIImageView=UIImageView(image: pictureArray[indexPath.row])
    let size = CGSize(width: 100, height: 100)
    imageview.center = cell.center
    imageview.bounds = CGRect(origin: cell.bounds.origin, size: size)

    cell.contentView.addSubview(imageview)

    let label = cell.viewWithTag(1) as! UILabel
    label.text = titleArray[indexPath.row]

    return cell
}

标签和颜色工作正常,但由于某种原因,图像视图似乎不在屏幕上。我有一种感觉,我的中心/边界限制正在迫使图像离开屏幕,但我尝试了很多组合,而且它们似乎都不适合我。

我该怎么做?

3 个答案:

答案 0 :(得分:0)

我在这里发布谷歌的正确答案。 (因为它是在一小时前解决的,没有人发布答案)

最佳做法是继承UICollectionViewCell,连接所有出口(标签,图像等)并在单元格上使用此类

祝所有人好运

答案 1 :(得分:0)

在Yogesh Suthar的评论之后,这是有用的:

我将UICollectionViewCell子类化,连接了图像和标签:

class NavigationCollectionViewCell: UICollectionViewCell {
    @IBOutlet weak var navImage: UIImageView!
    @IBOutlet weak var navLabel: UILabel!
}

然后,在ViewController中,我这样做了:

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! NavigationCollectionViewCell


    // Set cell properties
    cell.backgroundColor = colorArray[indexPath.row]

    cell.navImage.image = imageArray[indexPath.row]

    cell.navLabel.text = titleArray[indexPath.row]

    return cell
}

在Main.storyboard中设置图像和标签的大小和位置!

答案 2 :(得分:0)

将所需的视图作为子类插入,并将所有约束设置为cell.heightAchor等。这将由于某种原因修复该错误。如果将子视图作为子视图而不是作为单元格的属性添加到单元格中,则可以正常工作