当显示UITableViewCell时,CAGradientLayer无法正确显示树脂

问题描述 投票:0回答:1

我正在开发一个在tableViewCell内显示头像图片和一些个人资料信息的应用。将相同的头像图片设置为单元格背景,然后在其上方有另一个带有渐变的UIView,该渐变是使用CAGradientLayer创建的。

问题是,当显示我的单元格时,渐变没有正确的帧大小(应该是单元格的大小),而是在右侧留有空白。当我滚动tableView时,渐变会正确调整大小。

这是我创建渐变的方式:

func awakeFromNib() {
    let startColor = UIColor.gradientOverlay.cgColor //Defined elsewhere
    let endColor = UIColor.black.cgColor

    gradientLayer.frame = gradientView.frame
    gradientLayer.startPoint = CGPoint(x: 0.5, y: 0)
    gradientLayer.endPoint = CGPoint(x: 0.5, y: 1)
    gradientLayer.colors = [startColor, endColor]
    self.gradientView.layer.addSublayer(gradientLayer)
}

而且,我已经像这样重写了layoutSubviews方法:

override func layoutSubviews() {
    super.layoutSubviews()

    gradientLayer.frame = gradientView.frame
    self.layoutIfNeeded()
}

呈现视图时屏幕看起来像这样(我已经删除了敏感信息:]

tableViewCell

注意,标签右边的颜色会发生变化。最后一个颜色列仅是模拟器屏幕的边框。

你们碰巧知道如何解决这个问题吗?

ios swift uitableview core-animation cagradientlayer
1个回答
0
投票

替换

gradientLayer.frame = gradientView.frame

with

gradientLayer.frame = gradientView.bounds

并对此行self.layoutIfNeeded()进行评论

© www.soinside.com 2019 - 2024. All rights reserved.