No more checking for keyboard notifications and parsing keyboard apperance info manually!
A small (but cool) tool for handling UIKeyboard appearing and disappearing in your view controllers.
github "nodes-ios/KeyboardHelper" ~> 3.0.0pod 'KeyboardHelper', '~> 3.0.0'
Last versions compatible with lower Swift versions:
Swift 4:
~> 2.0.0
Swift 3:== 1.2.1
Swift 2.3:== 0.10.0
Swift 2.2:== 0.9.4
Implement KeyboardHelperDelegate in your UIViewController.
class ViewController: UIViewController, KeyboardHelperDelegateAdd a KeyboardHelper private variable, initialize it and set the delegate.
private var keyboardHelper : KeyboardHelper?
func viewDidLoad() {
...
self.keyboardHelper = KeyboardHelper(delegate: self)
...
}Implement the two methods in the KeyboardHelperDelegate:
public func keyboardWillAppear(_ info: KeyboardHelper.KeyboardAppearanceInfo)
public func keyboardWillDisappear(_ info: KeyboardHelper.KeyboardAppearanceInfo)Both methods take as argument a KeyboardAppearanceInfo object, which is basically a wrapper over the userInfo dictionary of the UIKeyboardWillShowNotification and UIKeyboardWillHideNotification notifications.
One example of implementation for the two delegate methods is:
func keyboardWillAppear(_ info: KeyboardAppearanceInfo) {
UIView.animate(withDuration: TimeInterval(info.animationDuration),
delay: 0,
options: info.animationOptions,
animations: {
let insets = UIEdgeInsetsMake(0, 0, info.endFrame.size.height, 0)
self.scrollView.contentInset = insets
self.scrollView.scrollIndicatorInsets = insets
},
completion: nil)
}
func keyboardWillDisappear(_ info: KeyboardAppearanceInfo) {
UIView.animate(withDuration: TimeInterval(info.animationDuration),
delay: 0,
options: info.animationOptions,
animations: {
let insets = UIEdgeInsetsZero
self.scrollView.contentInset = insets
self.scrollView.scrollIndicatorInsets = insets
},
completion: nil)
}The KeyboardAppearanceInfo object has the following properties:
beginFrame: aCGRectcorresponding to the value forUIKeyboardFrameBeginUserInfoKeyendFrame: aCGRectcorresponding to the value forUIKeyboardFrameEndUserInfoKeybelongsToCurrentApp: aBoolcorresponding to the value forUIKeyboardIsLocalUserInfoKeyanimationDuration: aDoublecorresponding to the value forUIKeyboardAnimationDurationUserInfoKeyanimationCurve: aUIViewAnimationCurvecorresponding to the value forUIKeyboardAnimationCurveUserInfoKeyanimationOptions: aUIViewAnimationOptionsfrom the value ofUIKeyboardAnimationCurveUserInfoKey
KeyboardAppearanceInfo also has the convenience method animateAlong:completion:, which can be used like this:
func keyboardWillAppear(info: KeyboardAppearanceInfo) {
info.animateAlong({ () -> Void in
let insets = UIEdgeInsetsMake(0, 0, info.endFrame.size.height, 0)
self.scrollView.contentInset = insets
self.scrollView.scrollIndicatorInsets = insets
}) { finished in }to get the same effect as the initial keyboardWillAppear: implementation example above.
Made with ❤️ at Nodes.
KeyboardHelper is available under the MIT license. See the LICENSE file for more info.