AMKeyboardFrameTracker 1.0.3

AMKeyboardFrameTracker 1.0.3

Amr Mohamed 维护。



AMKeyboardFrameTracker

用于自定义交互式键盘退出的简单 iOS 键盘框架追踪器

AMKeyboardFrameTracker

功能

  • 非常简单易用的 API
  • 提供代理和闭包回调
  • 可用于任何类型的输入视图(UITextFieldUITextView
  • 允许在带有 inputAccessoryViewUITabBarController 中进行交互式键盘弹出

示例

要运行示例项目,请克隆仓库,然后运行 .xcworkspace。

安装

AMKeyboardFrameTracker 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile

pod 'AMKeyboardFrameTracker'

需求

  • 支持iOS 9.0+

用法

let height = 60 // this should be your input view height
let keyboardFrameTrackerView = AMKeyboardFrameTrackerView.init(height: height)
inputTextView.inputAccessoryView = keyboardFrameTrackerView

注意

如果你的inputView的高度是动态变化的,取决于其内部的内容,那么你将需要保持inputAccessoryView的高度与inputView的高度同步,为此你需要覆写你ViewController中的viewDidLayoutSubviews方法并使用下面的代码

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    self.keyboardFrameTrackerView.setHeight(self.inputContainerView.frame.height)
}

或者你可以使用布局约束

var keyboardFrameTrackerViewHeightConstraint: NSLayoutConstraint!
override func viewDidLoad() {
    super.viewDidLoad()
    self.keyboardFrameTrackerView.delegate = self
    self.inputTextView.inputAccessoryView = self.keyboardFrameTrackerView
    self.keyboardFrameTrackerView.translatesAutoresizingMaskIntoConstraints = false
    self.keyboardFrameTrackerViewHeightConstraint = self.keyboardFrameTrackerView.heightAnchor.constraint(equalTo: self.inputTextView.heightAnchor, multiplier: 0)
    self.keyboardFrameTrackerViewHeightConstraint.isActive = true
}

然后在viewDidLayoutSubviews中更新这个常量

override func viewDidLayoutSubviews() {
     super.viewDidLayoutSubviews()
     self.keyboardFrameTrackerViewHeightConstraint.constant = self.inputTextView.frame.height
}

闭包回调

keyboardFrameTrackerView.onKeyboardFrameDidChange = { [weak self] frame in
    guard let self = self else {return}
    print("Keyboard frame: ", frame)
}

委托回调

keyboardFrameTrackerView.delegate = self
extension ExampleViewController: AMKeyboardFrameTrackerDelegate {
    func keyboardFrameDidChange(with frame: CGRect) {
        print("Keyboard frame: ", frame)
    }
}

UITabBarController支持

首先,你需要将你的inputView添加到ViewController的view作为一个普通的子视图,然后设置所有你的约束和布局,你需要从inputView到ViewController的view的底部约束,并使用下面的代码

extension ExampleViewController: AMKeyboardFrameTrackerDelegate {
    func keyboardFrameDidChange(with frame: CGRect) {
        let tabBarHeight = self.tabBarController?.tabBar.frame.height ?? 0.0
        let bottomSapcing = self.view.frame.height - frame.origin.y - tabBarHeight - self.keyboardFrameTrackerView.frame.height

        self.inputViewBottomConstraint.constant = bottomSapcing > 0 ? bottomSapcing : 0
        self.view.layoutIfNeeded()
    }
}

作者

@iAmrMohamed

许可

AMKeyboardFrameTracker 在 MIT 许可下提供。有关更多信息,请参阅 LICENSE 文件。