         guard !isObserving else { return }
         
         isObserving = true
-        NotificationCenter.default.addObserver(self, selector: #selector(onKeyboardHandler(_:)), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
-        NotificationCenter.default.addObserver(self, selector: #selector(onKeyboardHandler(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
+        
+        NotificationCenter.default.addObserver(self, selector: #selector(onKeyboardHandler(_:)), name: keyboardWillChangeFrame, object: nil)
+        NotificationCenter.default.addObserver(self, selector: #selector(onKeyboardHandler(_:)), name: keyboardWillHide, object: nil)
         
         panGesture = UIPanGestureRecognizer(target: self, action: #selector(onPan(_:)))
         panGesture?.delegate = self

    
    // MARK: - Action
    @objc func onKeyboardHandler(_ noti: Notification) {
        guard let rect = (noti.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return }
        
        var newFrame = rect
        
        switch noti.name {
        case UIResponder.keyboardWillChangeFrameNotification:
            if rect.origin.y < 0 {
                newFrame.origin.y = screenHeight - newFrame.height
            }
        case UIResponder.keyboardWillHideNotification:
            if rect.minY < 0.0 {
                newFrame.origin.y = screenHeight
            }

    private var isObserving: Bool = false
    private var isAdjustSafeAreaInset: Bool = false
 
    private let keyboardWillChangeFrame: Notification.Name = {
        #if swift(>=4.2)
        return UIResponder.keyboardWillChangeFrameNotification
        #else
        return NSNotification.Name.UIKeyboardWillChangeFrame
        #endif
    }()
    
    private let keyboardWillHide: Notification.Name = {
        #if swift(>=4.2)
        return UIResponder.keyboardWillHideNotification
        #else
        return NSNotification.Name.UIKeyboardWillHide
        #endif
    }()
    
    convenience public init(with adjustSafeAreaInset: Bool) {
        self.init()
        self.isAdjustSafeAreaInset = adjustSafeAreaInset
