自定义 UITextField 类中的 draw(_ rect: CGRect) 不要调用 iOS 14



我在自定义UITextField类中使用draw(_ rect:CGRect(。Draw功能在IOS13上可用,但在IOS14上不可用。我在init中添加了setNeedsDisplay((,但在使用setNeedsDisplay((后仍然不起作用

func setup() {
let border = CALayer()
let width = CGFloat(2.0)
border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: self.frame.size.height)
border.borderWidth = width
self.layer.addSublayer(border)
self.layer.masksToBounds = true
}
override init(frame: CGRect) {
super.init(frame: frame)
setNeedsDisplay()

}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setNeedsDisplay()
}
public override func draw(_ rect: CGRect) {
setup()
self.backgroundColor = .red
}

将绘图函数更改为didMoveToWindows

总是问我:(

override func didMoveToWindow() {
self.layer.addSublayer(border)
self.layer.masksToBounds = true
}

您不应该在layoutSubviews或Draw函数中添加任何内容

private lazy var border : CALayer = {
let layer = CALayer()
layer.borderWidth = CGFloat(2.0)
return layer
}()

override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}

required init?(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}

private func commonInit(){
setup() 
self.backgroundColor = .red
}

public override func layoutSubviews() {

border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: self.frame.size.height)

}
private  func setup() {
self.layer.addSublayer(border)
self.layer.masksToBounds = true
}

最新更新