在自定义 UITextField class 中绘制 (_ rect: CGRect) 不要调用 ios 14
draw(_ rect: CGRect) in custom UITextField class don't call on ios 14
我在自定义 UITextField class 中使用 draw(_ rect: CGRect)。
绘图功能适用于 IOS 13,但不适用于 IOS 14。
我在 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
}
您不应在 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
}
将绘图函数更改为 didMoveToWindows
总是问我:)
override func didMoveToWindow() {
self.layer.addSublayer(border)
self.layer.masksToBounds = true
}
我在自定义 UITextField class 中使用 draw(_ rect: CGRect)。 绘图功能适用于 IOS 13,但不适用于 IOS 14。 我在 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
}
您不应在 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
}
将绘图函数更改为 didMoveToWindows
总是问我:)
override func didMoveToWindow() {
self.layer.addSublayer(border)
self.layer.masksToBounds = true
}