我在自定义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
}