如何解决CAGradientLayer不适用于UITableViewCell边界
我正在使用带有Xib文件的自定义UITableViewCell开发简单的UITableView 我已经添加了MainView并将其固定到ContentView以便在MainView中添加所有视图 如下所示 UITableViewCell layout
当我尝试将CAGradientLayer添加到MainView时,它并不完全适合mainView边界,如下所示 whats happening on simulator 我用这段代码添加CAGradientLayer
override func awakeFromNib() {
super.awakeFromNib()
let gradient = CAGradientLayer()
mainView.layer.cornerRadius = 10
gradient.frame = mainView.frame
gradient.colors = [ColorCompatibility.gradEnd.cgColor,ColorCompatibility.gradStart.cgColor]
gradient.endPoint = CGPoint(x: 0.5,y: 1)
gradient.startPoint = CGPoint(x: 0.5,y: 0)
// gradient.cornerRadius = 20
gradient.shadowColor = ColorCompatibility.systemBackground.cgColor
gradient.shadowOpacity = 0.8
gradient.shadowOffset = .zero
gradient.shadowRadius = 5
gradient.shadowPath = UIBezierPath(roundedRect: mainView.layer.bounds,cornerRadius: 20).cgPath
gradient.shouldRasterize = true
gradient.rasterizationScale = UIScreen.main.scale
contentView.layer.insertSublayer(gradient,at: 0)
}
我该如何解决?
解决方法
这里有两个问题。首先是在awakeFromNib
中,单元格(及其内容视图)很可能没有正确的框架,因此您可以可以在框架正确的地方使用另一个生命周期挂钩,但是随后旋转设备会遇到问题,因此运行时单元格会发生变化。
我建议更新layoutSublayers(of:)
中的渐变图层框架。假设您为名为gradient
的图层创建了一个属性:
override func layoutSublayers(of layer: CALayer) {
super.layoutSublayers(of: layer)
gradient.frame = mainView.bounds
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。