键盘未触发通知显示,iOS 12。

3

在我的应用程序中,我希望能够收到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中是否有任何新变化导致了这种情况?否则,为什么它没有被调用?


3
你会在视图消失时移除观察吗? - Shehata Gamal
我在deinit中这样做。 - Pranav Wadhwa
请在模拟器或任何尚未更新至iOS 12的设备上检查其在iOS 11上的表现。 - Rakesha Shastri
在这个视图控制器的 deinit 中记录日志。我敢打赌它过早地消失了。 - matt
结果发现它在iOS 11上也不起作用。此外,我已经注释掉了deinit,但它仍然无法正常工作。 - Pranav Wadhwa
据我所知,只有当 UI 组件处于屏幕上并调用 becomeFirstResponder 时,才会调用 keyboardWillShow 函数。也许您可以分享一下您代码的这部分内容? - DevB2F
1个回答

0
这与模拟器设置有关,可以查看菜单“硬件>键盘>连接键盘硬件”。如果此选项打开,您将收到UIKeyboardWillHideNotification通知,但永远不会收到UIKeyboardWillShowNotification通知。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接