📜  如何获得键盘 xcode 的高度 (1)

📅  最后修改于: 2023-12-03 14:53:16.538000             🧑  作者: Mango

如何获得键盘 Xcode 的高度

在 Xcode 中,需要获取键盘的高度来动态调整界面布局等操作。以下是获得键盘高度的几种方法:

1. 使用通知

通过监听键盘弹出和收起的通知,可以获得键盘的高度。具体实现过程如下:

  1. 注册键盘弹出通知

    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
    
  2. keyboardWillShow(_:) 方法中获取键盘的高度

    @objc func keyboardWillShow(_ notification: Notification) {
        guard let userInfo = notification.userInfo, let keyboardFrame = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect else { return }
        let keyboardHeight = keyboardFrame.height
        // 处理键盘弹出后的操作,比如调整界面布局
    }
    
  3. 注册键盘收起通知

    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
    
  4. keyboardWillHide(_:) 方法中处理键盘收起后的操作

    @objc func keyboardWillHide(_ notification: Notification) {
        // 处理键盘收起后的操作,比如恢复界面布局
    }
    
2. 使用回调闭包

在键盘弹出时,执行回调闭包并将键盘高度作为参数传入。具体实现过程如下:

  1. 定义回调闭包类型与变量

    typealias KeyboardHeightBlock = (CGFloat) -> Void
    
    var keyboardHeightBlock: KeyboardHeightBlock?
    
  2. 注册键盘弹出通知并设置回调闭包

    NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillShowNotification, object: nil, queue: nil) { [weak self] notification in
        guard let self = self, let userInfo = notification.userInfo, let keyboardFrame = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect else { return }
        let keyboardHeight = keyboardFrame.height
        self.keyboardHeightBlock?(keyboardHeight)
    }
    
  3. 在需要使用键盘高度的地方设置回调闭包

    keyboardHeightBlock = { [weak self] keyboardHeight in
        // 处理键盘高度,比如调整界面布局
    }
    
3. 使用自定义文本输入框

自定义文本输入框并设置它的 inputAccessoryView 属性为一个高度为键盘高度的空视图,当键盘弹起时,文本输入框和空视图一起弹出,并且空视图大小就是键盘的高度。具体实现过程如下:

  1. 创建自定义文本输入框

    class MyTextField: UITextField {
        override var inputAccessoryView: UIView? {
            let accessoryView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 0))
            accessoryView.backgroundColor = .clear
            // 设置空视图高度为键盘高度
            accessoryView.frame.size.height = keyboardHeight
            return accessoryView
        }
    }
    
  2. 在需要使用键盘高度的地方获取文本输入框的 inputAccessoryView 的高度

    let textField = MyTextField()
    let keyboardHeight = textField.inputAccessoryView?.frame.height ?? 0
    // 处理键盘高度,比如调整界面布局
    

以上就是三种获得键盘高度的方法。使用通知的方式比较常用,也是官方推荐的方式。如果需要频繁获取键盘高度,可以使用回调闭包的方式。如果你对键盘高度的控制比较复杂,则可以使用自定义文本输入框的方式。