关闭键盘时,视图在 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 中使用自定义单元格视图关闭文本字段中的键盘?