ios - UITextField 自定义清除按钮在 layoutIfNeeded 上跳转
问题描述
我有一个用于文本字段的自定义清除按钮。layoutIfNeeded
如果我在键盘显示功能中使用,此按钮会从左向右跳转。它仅在我第一次编辑文本字段时发生,在后续编辑时不会发生。我如何解决它?我需要layoutIfNeeded
流畅的动画。
class MyViewController: UIViewController {
@IBOutlet weak var emailField: CustomTextField!
@objc func handleKeyboardNotification(_ notification: Notification) {
// calculate height etc....
UIView.animate(withDuration: 0.5, animations: { () -> Void in
self.view.layoutIfNeeded() // This causes clear button to jump
})
}
}
class CustomTextField: UITextField {
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func awakeFromNib() {
super.awakeFromNib()
self.initialize()
self.translatesAutoresizingMaskIntoConstraints = false
// other code
}
func initialize() {
self.text = ""
self.setPlaceHolderTextFontAndColour(text: self.placeholder!, font: UIFont.body, colour: .lightGray)
let clearButton = UIButton(frame: CGRect(x: 0, y: 0, width: 32, height: 32))
clearButton.setImage(UIImage.clearButton, for: [])
self.rightView = clearButton
clearButton.addTarget(self, action: #selector(self.clearClicked(sender: )), for: .touchUpInside)
self.clearButtonMode = .never
self.rightViewMode = .whileEditing
}
}
解决方案
也可以在你的课堂上尝试CustomTextField
(如果你不需要其他动画)
override func layoutSubviews() {
UIView.performWithoutAnimation {
super.layoutSubviews()
}
}
推荐阅读
- python - 如何从 keras 调谐器中的 RandomSearch 中选择试用版?
- phpstorm - PhpStorm 编辑器问题
- firebase - firebase 云函数 context.auth 字段是否适用于 firestore?
- c++ - 未找到合适的 Visual Studio 实例
- unity3d - Unity中的事件未触发
- go - ATECC608A:SHA 命令 (I²C)
- c# - GridView_RowCommand 未触发
- python - 我的函数在其余代码之前调用 return
- go - 如何区分 int null 和默认为零与 int 实际上等于零?
- laravel - laravel-fastlogin 在安卓设备上不起作用