如何解决CAGradientLayer不适用于以编程方式创建的UI中的完整视图
我正在处理一个iOS项目,该项目正在以编程方式创建其所有UI。不是情节提要。
我想在UIViewController的UIView的背景上添加渐变。
我创建了以下扩展方法。
extension UIView {
func addGradient(colors: [UIColor]) {
let gradientLayer = CAGradientLayer()
gradientLayer.bounds = bounds
gradientLayer.colors = colors.map { $0.cgColor }
layer.insertSublayer(gradientLayer,at: 0)
}
}
然后像这样将渐变添加到ViewController的viewDidLoad
中。
let topColor = UIColor(red: 0.28,green: 0.521,blue: 0.696,alpha: 1)
let bottomColor = UIColor(red: 0.575,green: 0.615,blue: 0.692,alpha: 1)
view.addGradient(colors: [topColor,bottomColor])
但是渐变不会应用于屏幕的整个宽度和高度。
我打印了视图的边界,并显示了这些值。
(0.0,0.0,375.0,812.0)
所以我不确定为什么渐变仍不能覆盖整个视图。
解决方法
在addGradient(colors:)
方法中,设置gradientLayer's
frame
而不是bounds
,即
func addGradient(colors: [UIColor]) {
let gradientLayer = CAGradientLayer()
gradientLayer.frame = bounds //here.....
//rest of the code...
}
此外,根据建议,将您的代码移至 viewDidLayoutSubviews()
方法,
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let topColor = UIColor(red: 0.28,green: 0.521,blue: 0.696,alpha: 1)
let bottomColor = UIColor(red: 0.575,green: 0.615,blue: 0.692,alpha: 1)
view.addGradient(colors: [topColor,bottomColor])
}
这是因为gradient's
frame
每次在view's
布局中进行任何更改时都必须更改。例如,纵向和横向。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。