The code is still here and you can still clone it, however the library will not receive any more updates or support.
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.