在 UITextField 和软件键盘 ios 之间提供最小填充

Posted

技术标签:

【中文标题】在 UITextField 和软件键盘 ios 之间提供最小填充【英文标题】:Provide minimum padding between UITextField and software keyboard ios 【发布时间】:2021-03-12 05:12:46 【问题描述】:

我正在使用 UIScrollView 中托管的 UITextField 并使用键盘通知来调整内容大小,现在当滚动视图滚动到文本字段时,键盘和文本字段之间的填充太小。反正我可以自定义填充吗??

【问题讨论】:

请显示您目前尝试过的代码。 该问题的一些屏幕截图也可能会有所帮助。 【参考方案1】:

您可以使用IQKeyboardManager 自动提供填充,而无需使用单行代码进行滚动视图的任何麻烦。您可以通过CocoaPodsManually 安装它。

【讨论】:

【参考方案2】:

添加滚动视图的底部约束出口(这必须是底部最后一个文本字段的底部约束)。 并在该视图控制器中添加以下代码行。

    fileprivate func addKeyBoardNotifications() 
        NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
    
    
    deinit 
        NotificationCenter.default.removeObserver(self)
    
    
    @objc func keyboardWillShow(notification: NSNotification) 
        if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue 
            UIView.animate(withDuration: 0.1, animations:  () -> Void in
//                self.view.frame.origin.y -= keyboardSize.height
                self.scrollViewBottomAnchor.constant = -keyboardSize.height
                self.view.layoutIfNeeded()
            )
        
    

    @objc func keyboardWillHide(notification: NSNotification) 
        if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue 
            UIView.animate(withDuration: 0.1, animations:  () -> Void in
                self.scrollViewBottomAnchor.constant = 0
                self.view.layoutIfNeeded()
            )
        
    

【讨论】:

以上是关于在 UITextField 和软件键盘 ios 之间提供最小填充的主要内容,如果未能解决你的问题,请参考以下文章

iOS 键盘挡住UITextField

iOS 中的 UITextField 和键盘管理问题

UITextField 光标和键盘问题

iOS - 在 UITextField 之外触摸时关闭键盘

iOS-基于键盘显示的UITextField高度和按钮移动的变化

隐藏 iOS 键盘预测文本栏 - UITextView / UITextField