为啥我的渐变层比我应用它的 UITextField 小?

Posted

技术标签:

【中文标题】为啥我的渐变层比我应用它的 UITextField 小?【英文标题】:Why is my Gradient Layer smaller than the UITextField I am applying it to?为什么我的渐变层比我应用它的 UITextField 小? 【发布时间】:2018-07-11 14:27:44 【问题描述】:

我正在尝试为我的文本字段提供渐变背景。我正在使用以下代码:

import UIKit

extension UITextField 
    func gradientBackground(firstColor: UIColor, secondColor: UIColor)
        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = bounds
        gradientLayer.colors = [firstColor.cgColor, secondColor.cgColor]
        gradientLayer.locations = [0.0, 1.0]
        gradientLayer.startPoint = CGPoint(x:0.0, y:0.0)
        gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.0)
        layer.addSublayer(gradientLayer)
    


class gradientTeLabel: UITextField 
    override func didMoveToWindow() 
        self.gradientBackground(firstColor: UIColor(red: 0.90, green: 0.61, blue: 0.00, alpha: 1), secondColor: UIColor(red: 0.70, green: 0.61, blue: 0.70, alpha: 1))
    

我所做的是创建一个扩展和一个类,我将附加到一些 UITextFields。结果是渐变层比文本字段短一点,它开始在 texfield 内部高几个像素,而不是全部覆盖。我能做什么?

【问题讨论】:

【参考方案1】:

将代码移动到layoutSubviews,因为它包含右边界

class gradientTeLabel: UITextField 
    var once = true
     override func layoutSubviews() 
      super.layoutSubviews()
        if once 
              self.gradientBackground(firstColor: UIColor(red: 0.90, green: 0.61, blue: 0.00, alpha: 1), secondColor: UIColor(red: 0.70, green: 0.61, blue: 0.70, alpha: 1))
              once = false 
        
    

【讨论】:

它就像一个魅力。我不能给你投票,因为我的代表不到 15。我肯定会竖起大拇指。为什么会发生这种情况? didMoveToWindow 内部,您没有获得分配给渐变框架的文本字段的正确边界尝试在两种方法中打印它们,您会注意到,还有一次,因为@987654324 @ 被多次调用

以上是关于为啥我的渐变层比我应用它的 UITextField 小?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 fwrite 写的比我告诉它的要多?

为啥我的由代码创建的 UITextField 不能在我的 tableview Cell 中工作?

为啥我的 foreach 比我的 for 循环快? [复制]

为啥 strcmp 比我的函数快这么多?

为啥 strchr 比我的 simd 代码快两倍

为啥 mySQL 查询,左连接“明显”比我的内连接快