【发布时间】:2019-02-26 21:36:22
【问题描述】:
在我的应用程序中,我想要UIResponder.keyboardWillShowNotification 的通知,以便更新我的文本字段的 y 位置。它在 iOS 12 之前工作;现在,它没有在我的一个视图控制器中调用(它适用于其他视图控制器)。这是我的代码:
@objc func keyboardWillShow(_ notification: Notification) {
print("keyboard will show 2")
guard let frameValue: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else {
return
}
let keyboardFrame = frameValue.cgRectValue
UIView.animate(withDuration: animationTime) {
self.addViewBottomConstraint.constant = keyboardFrame.size.height
self.view.layoutIfNeeded()
print("Bottom contraint height = \(self.addViewBottomConstraint.constant)")
}
}
@objc func keyboardWillHide(_ notification: Notification) {
UIView.animate(withDuration: animationTime) {
self.addViewBottomConstraint.constant = 0
self.view.layoutIfNeeded()
}
}
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}
这里,“keyboard will show 2”没有打印出来,但它是为其他具有相同通知的视图控制器打印的。 iOS 12 中是否有任何新功能导致了这种情况?否则,是否有特殊原因导致它没有被调用?谢谢你的帮助。
【问题讨论】:
-
您是否在任何地方删除观察,例如当视图消失时??
-
我在 deinit 中这样做
-
在模拟器或任何尚未更新到 iOS 12 的设备上检查一次 iOS 11。
-
登录这个视图控制器的
deinit。我敢打赌它会过早地消失。 -
原来iOS 11也不行。另外,我注释掉了 deinit 但它仍然不起作用
标签: ios swift notifications keyboard ios12