我是新手。 我有三个带有渐变背景的UItextFields。因为背景并非固定为字段的大小,所以我不得不将gradientSet放置在viewDidLayoutSubviews函数中。就是这样:
现在背景大小几乎可以了,但是又出现了另一个问题。问题是当我在字段中键入内容时,直到我转到下一个字段时,它才会显示文本。我该如何解决?另外,请告诉我最小场背景有什么问题??
我的部分代码是:
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)
}
}
谢谢。
答案 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
,如果需要,在其中插入渐变层,然后调整其大小以匹配边界。