关闭键盘时,视图在 iPhone X 中不断向下移动

Posted

技术标签:

【中文标题】关闭键盘时,视图在 iPhone X 中不断向下移动【英文标题】:View keeps moving down in iPhoneX on keyboard dimissal 【发布时间】:2018-09-04 16:53:37 【问题描述】:

我在不同的设备上进行测试,在 iPhone X 上进行测试时发现了一个问题。

在我看来,基本上,我有一个图像、一个文本字段和一个按钮;全部在水平和垂直居中的堆栈视图中。当我点击文本字段并且键盘出现时,我将视图向上移动,以免用键盘阻挡任何内容 - 键盘返回时反之亦然。这是我的代码:

@objc func keyboardWillShow(notification: NSNotification) 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue 
        if self.view.frame.origin.y == 0
            self.view.frame.origin.y -= keyboardSize.height/2
        
    


@objc func keyboardWillHide(notification: NSNotification) 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue 
        if self.view.frame.origin.y != 0
            self.view.frame.origin.y += keyboardSize.height/2
        
    

我已将观察者添加到 viewDidLoad():

NotificationCenter.default.addObserver(self, selector: #selector(nameVC.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(nameVC.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)

这在模拟器中的所有设备类型上都运行良好 - 除了 iPhone X。

如下图所示,当 iPhone X 上的键盘关闭时,视图会向下移动。这种情况一次又一次地发生,直到文本字段被键盘覆盖,我必须重新启动应用程序才能重新获得控制权。

我完全被这个难住了,这段代码怎么能在除了 iPhone X 之外的所有设备类型上工作?

请任何人帮忙

【问题讨论】:

你应该使用keyboardFrameEndUserInfoKey而不是keyboardFrameBeginUserInfoKey 完美运行!非常感谢您的帮助! 【参考方案1】:

您应该使用keyboardFrameEndUserInfoKey 而不是keyboardFrameBeginUserInfoKey,后者通过safeAreaInsets 返回正确的高度。

【讨论】:

以上是关于关闭键盘时,视图在 iPhone X 中不断向下移动的主要内容,如果未能解决你的问题,请参考以下文章

回到前台的 iPhone 应用程序将视图移回其原点,并且键盘仍然可见

推动视图控制器时防止键盘关闭

尝试在 iphone 中使用自定义单元格视图关闭文本字段中的键盘?

applicationWillResignActive 关闭键盘 iPhone

关闭键盘无法与 PickerView 一起使用

iPhone:隐藏应用程序上的键盘输入背景或视图消失