通过扩展为 UILabel 添加渐变

Adding gradient to UILabel through extension

您可能知道,如果您尝试为 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 函数计算位置,对问题不重要

信息不足。当我这样称呼您的代码时,您的代码对我来说工作正常:

    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 还不知道的时候。