首页 > 解决方案 > 通过扩展向 UILabel 添加渐变

问题描述

您可能知道,如果您尝试为 UILabel 设置渐变背景,它会覆盖文本。我想为 UILabels 编写一个扩展,以便放置渐变背景。这是我的代码,但渐变放在一个正方形中,向下和向右移动到标签。我不明白为什么,因为我使用的是同一个框架

public extension UILabel {
    func applyGradientToLabelAtAngle(_ angle : CGFloat, _ color1 : UIColor, _ color2 : UIColor){
        let gradient = CAGradientLayer()
        gradient.frame = self.frame
        gradient.colors = [color1.cgColor, color2.cgColor]
        gradient.calculatePoints(for: angle)
        let index = self.layer.superlayer!.sublayers!.firstIndex(of: self.layer)!
        self.layer.superlayer!.sublayers!.insert(gradient, at: index)
        
    }
}

编辑:calculatePoints 函数计算位置,对问题不重要

标签: iosswiftuser-interfacegradient

解决方案


信息不足。当我这样称呼你的代码时,你的代码对我来说很好:

    let lab = UILabel()
    lab.text = "Howdy there"
    lab.sizeToFit()
    lab.frame.origin = .init(x:100, y:100)
    self.view.addSubview(lab)
    lab.applyGradientToLabelAtAngle(.pi, .green, .red)

问题显然是你没有这样称呼它。但是你没有说你怎么称呼它的。我怀疑你在错误的时间调用它,即在最重要的事情self.frame还不知道的时候。


推荐阅读