滚动时UICollectionview单元格会发生变化

时间:2017-08-20 08:43:58

标签: ios swift uicollectionview uicollectionviewcell uicollectionviewlayout

我的UICollectionview看起来像这样:

enter image description here

我的UICollectionviewCell包含一个图像,通过设置角半径属性,我试图使其圆,但这是结果。我的HeaderView中的图像也是如此。

此外,当我滚动并随机改变外观时,我的UICollectionviewCells会发生变化,有些人最终是圆形的,有些甚至是菱形的,有些图标是黑色的。

enter image description here

以下是我用于CollectionviewCell的代码:

func collectionView(_ collectionView: UICollectionView,
                             cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    //1
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionViewCell",
                                                  for: indexPath) as! CollectionViewCell
    cell.imageView.layoutIfNeeded()
    cell.imageView.layer.masksToBounds = true
    cell.backgroundColor = UIColor.clear
    cell.imageView.tintColor = UIColor.white
    cell.imageView.layer.borderWidth = 2
    cell.imageView.layer.borderColor = UIColor.white.cgColor
    cell.imageView.layer.cornerRadius = cell.frame.width/2


    let icon = categories[indexPath.item]?.image
    cell.nameLabel.text = categories[indexPath.item]?.name
    cell.nameLabel.textColor = UIColor.white
    cell.imageView.image = icon
    let selected = categories[indexPath.item]?.selected
    if selected! {
        cell.isSelected = true
        collectionView.selectItem(at: indexPath, animated: true, scrollPosition: .centeredHorizontally)
        cell.imageView.backgroundColor = UIColor.white
        cell.imageView.tintColor = colors.colorBottom
    }


    return cell
}

以下是我的HeaderView的代码:

//make the profileImageView round
    imageview.layer.masksToBounds = true
    imageview.layer.cornerRadius = imageview.frame.height/2
    imageview.layer.borderWidth = 4
    imageview.layer.borderColor = UIColor.white.cgColor

2 个答案:

答案 0 :(得分:0)

1。imageView UICollectionViewCell round Storyboard中的UICollectionViewCell's:{/ 1>}

  1. clipToBounds true设为UIImageView's
  2. clipToBounds true设为aspectRatio
  3. 设置imageView = 1:1
  4. cellForItemAt

    cell.imageView.layoutIfNeeded() cell.imageView.layer.masksToBounds = true

    中删除这两行
    icons becoming black

    2. 下面一行必须对 cell.imageView.tintColor = colors.colorBottom

    负责
    selected

    检查是否在选择单元格时更改categories数组中的headerView状态?

    3。aspectRatio

    1. imageView
    2. 中设置1:1 = storyboard的{​​{1}}
    3. 从您的代码中删除:
    4. imageview.layer.masksToBounds = true

      1. storyboard中:将UIImageView's clipToBounds设为true
      2. 4. 屏幕截图:

        enter image description here

        如果您需要有关该代码的任何其他帮助,请与我们联系。

答案 1 :(得分:-2)

你不能假设你的单元格的框架在出列后重新计算,而是使用常量值:

cell.imageView.layer.cornerRadius = 16.0