在“集合视图”单元格中的UIView上设置渐变背景
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在“集合视图”单元格中的UIView上设置渐变背景相关的知识,希望对你有一定的参考价值。
我有一个UICollectionViewCell
,其中包含要在其上设置渐变背景的UIView
。这是我的cellForItemAt
方法:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
if let cell: PaymentMethodCVCell = collectionView.dequeueReusableCell(withReuseIdentifier: "paymentMethodCVCell", for: indexPath) as? PaymentMethodCVCell
let row = indexPath.row
cell.rewardsCard.setGradientBackground(colorTop: appRed, colorBottom: appRed.darkerColor(), withCornerRadius: 10)
return cell
return UICollectionViewCell()
其中setGradientBackground
被定义为UIView
的扩展名:
func setGradientBackground(colorTop: UIColor, colorBottom: UIColor, withCornerRadius : CGFloat)
let gradientLayer = CAGradientLayer()
gradientLayer.colors = [colorBottom.cgColor, colorTop.cgColor]
gradientLayer.startPoint = CGPoint(x: 0.5, y: 1.0)
gradientLayer.endPoint = CGPoint(x: 0.5, y: 0.0)
gradientLayer.locations = [0, 1]
gradientLayer.frame = bounds
gradientLayer.cornerRadius = withCornerRadius
layer.insertSublayer(gradientLayer, at: 0)
这很好,但是仅当我在UICollectionView
中向上和向下滚动并且重新加载了单元格时-最初加载到页面上的单元格没有正确设置背景。在UICollectionViewCell
本身中执行此操作也不起作用。
答案
视图bounds
在cellForRowAt
内部尚不为人所知,而且当单元格出队时滚动时会添加许多渐变
gradientLayer.frame = bounds
所以在单元格内部
var once = true
override func layoutSubviews()
super.layoutSubviews()
if once
// add gradient
once = false
OR
override func layoutSubviews()
super.layoutSubviews()
if !(rewardsCard.layer.sublayers?.first is CAGradientLayer )
// add gradient
另一答案
尚未确定视界
gradientLayer.frame = bounds
以上是关于在“集合视图”单元格中的UIView上设置渐变背景的主要内容,如果未能解决你的问题,请参考以下文章
当我在收藏视图中滚动时,我的自定义单元格中的 UIView 锚点不断变化