在键盘上计算和移动 UIView(显示/隐藏)

Posted

技术标签:

【中文标题】在键盘上计算和移动 UIView(显示/隐藏)【英文标题】:Calculate & move UIView on keyboard(show/hide) 【发布时间】:2018-03-18 09:08:50 【问题描述】:

如果键盘与字段重叠并在键盘关闭后移回其原始位置,我正在尝试计算移动 UITextField 及其父 UIView 的位置。

我已经尝试过https://github.com/hackiftekhar/IQKeyboardManager,但它不适用于我的特殊情况。

为了解释问题,请参考随附的两张截图,一张是打开键盘时,另一张是关闭时。

如您所见,在键盘打开时,文本字段与键盘重叠,我想将文本字段与弹出视图一起移动以重新调整并坐在键盘上方。

这是我尝试过的。

func textFieldDidBeginEditing(_ textField: UITextField) 
    self.startOriginY = self.frame.origin.y
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)


@objc func keyboardWillShow(_ notification: Notification) 
    if let keyboardFrame: NSValue = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue 
        let keyboardRectangle = keyboardFrame.cgRectValue
        let keyboardHeight = keyboardRectangle.height
        let screenHeight = self.backgroundView.frame.height
        let viewHeight = self.frame.height
        let diffHeight = screenHeight - viewHeight - keyboardHeight
        if diffHeight < 0 
            self.frame.origin.y = -self.textField.frame.height
        
    


func textFieldDidEndEditing(_ textField: UITextField) 
    self.frame.origin.y = self.startOriginY

此代码将视图移动到不正确的位置。我试图弄清楚如何计算正确的位置来移动视图并移除键盘重叠。

解决这个问题的最佳方法是什么?

谢谢。

【问题讨论】:

【参考方案1】:

基本上,您需要将视图嵌入到滚动视图中,并使用Apple's example 通过更改滚动视图的底部内容插入来处理调整:

    嵌入在滚动视图中 注册键盘通知 通过更改底部内容插入来实现处理通知的逻辑

我已将 Apple 的代码狙击转换为 Swift。

将显示键盘

if let info = notification.userInfo,
   let size = (info[UIKeyboardFrameEndUserInfoKey] as AnyObject?) 
       let newSize = size.cgRectValue.size
       let contentInset = UIEdgeInsetsMake(0.0, 0.0, newSize.height, 0.0)
       scrollView.contentInset = contentInset
 

键盘将隐藏:

let contentInset = UIEdgeInsets.zero
scrollView.contentInset = contentInset
scrollView.scrollIndicatorInsets = contentInset

您还可以将硬编码偏移量添加到newSize.height,即:newSize.height + 20

【讨论】:

让我试试这个然后回来。谢谢@OhadM 当然,您需要检查您的滚动视图是否实际设置并运行良好。您是否尝试添加到 newSize.height 额外的偏移量?因为您在键盘上方有预测和自定义视图

以上是关于在键盘上计算和移动 UIView(显示/隐藏)的主要内容,如果未能解决你的问题,请参考以下文章

显示和隐藏 UIView

如何在 UIView 中设置滚动视图以向上滑动被键盘隐藏的文本字段?

如何使用 Phonegap 和 javascript 在 iPhone 上隐藏和显示键盘

显示键盘时,自定义 UIView 正在向上推部分内容

如果键盘阻止了文本视图,则移动 UIView

键盘显示时 uipopover 隐藏