【问题标题】:Keyboard Will Show Notification Not Called iOS 12键盘将显示未调用 iOS 12 的通知
【发布时间】: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


【解决方案1】:

这可能与模拟器设置有关,请参阅菜单“硬件 > 键盘 > 连接键盘硬件”。如果此选项为 ON,您将获得 UIKeyboardWillHideNotification,但不会获得 UIKeyboardWillShowNotification。

【讨论】:

    猜你喜欢
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2018-02-14
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2022-07-21
    相关资源
    最近更新 更多