如何快速将文本字段的文本带到渐变背景的前面

时间:2019-01-06 09:43:24

标签: ios swift

我是新手。 我有三个带有渐变背景的UItextFields。因为背景并非固定为字段的大小,所以我不得不将gradientSet放置在viewDidLayoutSubviews函数中。就是这样:

enter image description here  现在背景大小几乎可以了,但是又出现了另一个问题。问题是当我在字段中键入内容时,直到我转到下一个字段时,它才会显示文本。我该如何解决?另外,请告诉我最小场背景有什么问题?? enter image description here

我的部分代码是:

class phoneverify: UIViewController , UITextFieldDelegate{


@IBOutlet weak var studentNo: UITextField!

@IBOutlet weak var phoneNo: UITextField!
@IBOutlet weak var codeNo: UITextField!

 override func viewDidLoad() {
        super.viewDidLoad()

        let textfieldBorderColor = UIColor(red: 141/255, green: 231/255, blue: 201/255, alpha: 1)
        let barColor = UIColor(red: 73/255, green: 132/255, blue: 109/255, alpha: 1)

        phoneNo.layer.borderWidth = 3
        phoneNo.layer.borderColor = textfieldBorderColor.cgColor
        phoneNo.layer.cornerRadius = 6

        codeNo.layer.borderWidth = 3
        codeNo.layer.cornerRadius = 6
        codeNo.layer.borderColor = textfieldBorderColor.cgColor
        codeNo.isUserInteractionEnabled = false

        studentNo.layer.borderWidth = 3
        studentNo.layer.borderColor = textfieldBorderColor.cgColor
        studentNo.layer.cornerRadius = 6

        self.phoneNo.delegate = self
        self.studentNo.delegate = self
    }


    override func viewDidLayoutSubviews() {
        codeNo.setGradient(startColor:UIColor.gray, endColor: UIColor.white)
        phoneNo.setGradient(startColor:UIColor.gray, endColor: UIColor.white)
        studentNo.setGradient(startColor:UIColor.gray, endColor: UIColor.white)      
    }
extension UITextField {
    func setGradient(startColor:UIColor,endColor:UIColor) {
        let gradient:CAGradientLayer = CAGradientLayer()
        gradient.colors = [startColor.cgColor, endColor.cgColor]
        gradient.frame = self.bounds
        gradient.cornerRadius = 6
        self.layer.addSublayer(gradient)
    }
}

谢谢。

1 个答案:

答案 0 :(得分:1)

由于您在调用addSublayer时将CAGradientLayer添加到UITextField的所有其他层之上,因此渐变会隐藏文本。使用insertSublayer(_:at:)docs)将图层插入所有其他图层下方时,可能会起作用。

extension UITextField {
    func setGradient(startColor:UIColor,endColor:UIColor) {
        let gradient:CAGradientLayer = CAGradientLayer()
        gradient.colors = [startColor.cgColor, endColor.cgColor]
        gradient.frame = self.bounds
        gradient.cornerRadius = 6
        self.layer.insertSublayer(gradient, at: 0)
    }
}

在文本字段外部扩展的渐变是因为在文本字段框架更新时它们不会自动调整大小。另外,当子视图布局时,您现在要添加一个新的渐变层。

要解决此问题,您可以创建UITextField的子类,重写layoutSubviews,如果需要,在其中插入渐变层,然后调整其大小以匹配边界。