解决iOS uitextView 键盘遮挡问题

简介

在iOS开发中,当使用uitextView输入框时,有时候会遇到键盘挡住输入框的情况,这给用户的输入体验造成了困扰。本文将教会刚入行的小白如何解决这个问题。

整体流程

首先我们来看一下解决该问题的整体流程:

flowchart TD
    A[监听键盘通知] --> B[获取键盘高度]
    B --> C[调整输入框位置]

步骤说明

  1. 监听键盘通知:当键盘出现或消失时,我们需要监听系统的通知来获取键盘的高度。
  2. 获取键盘高度:根据通知中的信息,获取键盘的高度。
  3. 调整输入框位置:根据键盘的高度,调整输入框的位置,使其不被键盘遮挡。

代码实现

步骤1:监听键盘通知

// 添加键盘监听通知
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)

步骤2:获取键盘高度

@objc func keyboardWillShow(_ notification: Notification) {
    guard let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return }
    let keyboardHeight = keyboardSize.height
    // 在这里可以处理键盘弹出时的逻辑
}

@objc func keyboardWillHide(_ notification: Notification) {
    // 在这里可以处理键盘隐藏时的逻辑
}

步骤3:调整输入框位置

// 调整输入框位置
func adjustTextViewPositionForKeyboard(height: CGFloat) {
    textView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: height, right: 0)
    textView.scrollIndicatorInsets = textView.contentInset
}

完整代码示例

下面是一个完整的示例代码:

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var textView: UITextView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 添加键盘监听通知
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
    }
    
    @objc func keyboardWillShow(_ notification: Notification) {
        guard let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return }
        let keyboardHeight = keyboardSize.height
        adjustTextViewPositionForKeyboard(height: keyboardHeight)
    }
    
    @objc func keyboardWillHide(_ notification: Notification) {
        adjustTextViewPositionForKeyboard(height: 0)
    }
    
    func adjustTextViewPositionForKeyboard(height: CGFloat) {
        textView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: height, right: 0)
        textView.scrollIndicatorInsets = textView.contentInset
    }
}

总结

通过以上步骤,我们可以很容易地解决iOS uitextView键盘遮挡的问题。希望这篇文章对你有所帮助!