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.0
pod '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, KeyboardHelperDelegate
Add 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
: aCGRect
corresponding to the value forUIKeyboardFrameBeginUserInfoKey
endFrame
: aCGRect
corresponding to the value forUIKeyboardFrameEndUserInfoKey
belongsToCurrentApp
: aBool
corresponding to the value forUIKeyboardIsLocalUserInfoKey
animationDuration
: aDouble
corresponding to the value forUIKeyboardAnimationDurationUserInfoKey
animationCurve
: aUIViewAnimationCurve
corresponding to the value forUIKeyboardAnimationCurveUserInfoKey
animationOptions
: aUIViewAnimationOptions
from 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.