 }
 
 extension TabNavigationController {
+    @objc
+    fileprivate func _handleKeyboardWillChangeFrameNotification(_ notification: NSNotification) {
+        if let keyboardFrame = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue, let duration = notification.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? TimeInterval, let curve = notification.userInfo?[UIKeyboardAnimationCurveUserInfoKey] as? UInt {
+            print("Keyboard height: \(keyboardFrame.height)")
+            self._keyboardAlignmentViewHeightConstraint.constant = keyboardFrame.height
+            UIView.animate(withDuration: duration, delay: 0.0, options: UIViewAnimationOptions(rawValue: curve), animations: { [unowned self] in
+                self.view.layoutIfNeeded()
+            }, completion: nil)
+        }
+    }
+}
+
+extension TabNavigationController {
     // MARK: - Public.
     // MARK: Tab view controllers.
     

    }
}

extension ViewController {
    override func removeFromParentViewController() {
        super.removeFromParentViewController()

        view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[_contentScrollView]|", options: [], metrics: nil, views: ["_contentScrollView":_contentScrollView]))
        _contentScrollView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
        _contentScrollView.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true
    }
    
    private func _setupKeyboardAlignmentView() {
        view.insertSubview(_keyboardAlignmentView, belowSubview: _contentScrollView)
        _keyboardAlignmentView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        _keyboardAlignmentView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        _keyboardAlignmentView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    }
    
    private func _transitionTabNavigationBarWithPercent(_ perecent: CGFloat, transition views: TabNavigationBar.TabNavigationTransitionContext?) {
