CAGradientLayer 不完全适合 UITableViewCell 边界
CAGradientLayer not fit perfectly on UITableViewCell bounds
我正在使用带有 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
}
我正在使用带有 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
}