我有一个用于表视图的渐变图层集,使用以下代码:
func setGradientToTableView(_ topColor:UIColor, _ bottomColor:UIColor) {
let gradientBackgroundColors = [topColor.cgColor, bottomColor.cgColor]
let gradientLocations = [0.0,1.0]
let gradientLayer = CAGradientLayer()
gradientLayer.colors = gradientBackgroundColors
gradientLayer.locations = gradientLocations as [NSNumber]
gradientLayer.frame = tableView.bounds
let backgroundView = UIView(frame: tableView.bounds)
backgroundView.layer.insertSublayer(gradientLayer, at: 0)
tableView.backgroundView = backgroundView
}
而且:
setGradientToTableView(UIColor(red: 125/255.0, green: 125/255.0, blue: 125/255.0, alpha: 1.0), UIColor(red: 125/255.0, green: 125/255.0, blue: 0/255.0, alpha: 1.0)).
当我运行应用程序时,问题就出现了。渐变图层将是故事板中所选设备和方向的表格视图的大小。
有谁知道如何解决这个问题? - 顺便说一句,我对表视图的约束是导航栏底部,前导,尾随和安全区域底部
编辑:这是截图
答案 0 :(得分:4)
问题可能是您在viewDidLoad()
方法中设置了渐变,其中尚未绘制表格视图,其框架是XIB / storyboard中的默认框架。
你应该在didLayoutSubviews()
中这样称呼它:
var gradientLayer: CAGradientLayer?
func didLayoutSubviews() {
if (gradientLayer == nil) {
setGradientToTableView(UIColor(red: 125/255.0, green: 125/255.0, blue: 125/255.0, alpha: 1.0), UIColor(red: 125/255.0, green: 125/255.0, blue: 0/255.0, alpha: 1.0))
}
}
保持对类中渐变图层的引用,以确保只设置一次渐变,因为多次调用didLayoutSubviews
。