我正在使用下面的代码添加一个按钮渐变
extension UIView {
func applyGradient(colors: [UIColor]) {
self.applyGradient(colors: colors, locations: nil)
}
func applyGradient(colors: [UIColor], locations: [NSNumber]?) {
let gradient = CAGradientLayer()
gradient.frame = self.bounds
gradient.colors = colors.map { $0.cgColor }
gradient.locations = locations
gradient.startPoint = CGPoint(x: 0, y: 0)
gradient.endPoint = CGPoint(x: 1, y: 0)
self.layer.insertSublayer(gradient, at: 0)
}
}
在 viewDidLayoutSubviews()
中调用 initStyle()
无效。
func initStyle() {
submitBtn.applyGradient(colors: [#colorLiteral(red: 0.1176470588, green: 0.3882352941, blue: 0.5254901961, alpha: 1), #colorLiteral(red: 0.2941176471, green: 0.9098039216, blue: 0.9529411765, alpha: 1)])
submitBtn.layer.cornerRadius = 15.0
submitBtn.layer.masksToBounds = true
}
我正在以编程方式创建所有 UI 元素。我已正确设置约束并且正在运行。
lazy var submitBtn: UIButton = {
let btn = UIButton(type: .system)
btn.translatesAutoresizingMaskIntoConstraints = false
btn.setTitle("SUBMIT", for: .normal)
return btn
}()
如何让它工作?
仅当我将 initStyle()
放在 viewDidAppear()
而不是 viewDidLayoutSubviews()
时才会显示渐变,这会造成延迟在显示按钮渐变。我想避免这种延迟。所以我将它添加到 viewDidLayoutSubviews 中,但是渐变没有出现。
最佳答案
我认为这里的问题是在调用梯度函数时 self.bounds 为 0。稍后尝试调用它,例如 viewWillAppear 或调用 view.layoutSubViews 来触发 iewDidLayoutSubviews()
关于ios - 添加到 viewDidLayoutSubviews 时按钮渐变不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56304384/