键盘快速出现时文本视图向上

Posted

技术标签:

【中文标题】键盘快速出现时文本视图向上【英文标题】:Text view up when keyboard appears swift 【发布时间】:2020-10-17 00:39:19 【问题描述】:

我在表格中有 textField 和 textView。编辑 textFiled 时,此代码有效,所有文本字段均位于键盘上方。当我编辑 textView 时,什么也没有发生。这将有助于编辑代码,以便 textView 也可以使用此代码。请不要提供第三方库。谢谢

 override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated)
        
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(keyboardWillShow(_:)),
            name: UIResponder.keyboardWillShowNotification,
            object: nil)
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(keyboardWillHide(_:)),
            name: UIResponder.keyboardWillHideNotification,
            object: nil)
    
    
    override func viewWillDisappear(_ animated: Bool) 
        super.viewWillDisappear(animated)
        
        NotificationCenter.default.removeObserver(self)
    
        
    override func viewDidLoad() 
        super.viewDidLoad()
   
       
    
        @objc
        fileprivate func keyboardWillShow(_ notification: Notification) 
            let keyboardFrame = ((notification as NSNotification).userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue ?? CGRect.zero
            
            let contentInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: keyboardFrame.height, right: 0.0)
            self.tableView.contentInset = contentInsets
            self.tableView.scrollIndicatorInsets = contentInsets
            
            UIView.animate(withDuration: 0.25) 
                self.tableView.layoutIfNeeded()
                self.view.layoutIfNeeded()
            
        
        
        @objc
        fileprivate func keyboardWillHide(_ notification: Notification) 
            tableView.contentInset = .zero
        
    

【问题讨论】:

键盘出现了吗?是否设置了断点来检查keyboardWillShow 函数是否被调用? @Mat 是的,它有效。 textField一切都很好,但是TextView没有结果,我可以滚动然后可以看到,它可以滚动到键盘本身吗? 【参考方案1】:

是的,你可以! 您需要做的就是知道您的文本字段位置, 然后set your scroll Offset

写这个:

NotificationCenter.default.addObserver(self, selector: #selector(yourMethod(_:)), name: UITextField.textDidBeginEditingNotification, object: nil)

和你的功能

@objc func yourMethod(_ sender: NSNotification) 
if let tfActive = sender.object as? UITextField 
            let frameRelatedToSuper = tfActive.convert(yourScrollView.contentOffset, to: nil)
            //[mockTF convertPoint:self.parentScrollView.contentOffset toView:nil];
            yourScrollView.setContentOffset(frameRelatedToSuper, animated: true)
        
    

剩下的就是你的逻辑了。 祝你好运

注意:如果不增加额外的高度,它可能会停在文本字段的顶部 你可以声明这个

var padding: CGFloat = 10
padding = yourTF.bounds.height + padding
frameRelatedToSuper += padding

编辑:剩下的就是我的意思是你的逻辑,因为你需要计算你的键盘高度并添加到framerelatedtosuper

【讨论】:

以上是关于键盘快速出现时文本视图向上的主要内容,如果未能解决你的问题,请参考以下文章

仅当键盘快速出现时如何使scrollView滚动

当键盘出现Swift时,使用文本字段和按钮向上移动视图

键盘出现时如何向上移动集合视图控制器?

当键盘出现并启用滚动时,TextField 向上移动

Android:如何防止键盘在我的布局中向上推某个视图? [复制]

iPhone:滚动网页视图时需要保持键盘向上吗?