일반적인 코드에 키보드가 올라오는 속도에 맞춰서 TextField도 같이 속도에 맞춰서 올라오게 하는 코드 추가 했다. 

let animationDuration = notiInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as! TimeInterval

 

해당 코드가 없을 경우 키보드가 올라오고 TextField 가 뒤늦게 따라 올라오는 경우가 있어서 미세한 차이기는 하지만 거슬린다.

/////////////////////////////////////////////////
// NotificationCenter 키보드 Noti 등록

// 키보드 보이기
NotificationCenter.default.addObserver( self, selector: #selector(keyboardWillShow(noti: )) , name: UIResponder.keyboardWillShowNotification, object: nil)
// 키보드 숨기기
NotificationCenter.default.addObserver( self, selector: #selector(keyboardWillHide(noti: )) , name: UIResponder.keyboardWillHideNotification, object: nil)
        
// NotificationCenter 삭제
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification , object: nil)
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification , object: nil)
        
@objc func keyboardWillShow(noti: NSNotification) {
		//키보드의 높이를 가져오는 코드
        let notiInfo = noti.userInfo! as NSDictionary
        let keyboardFrame = notiInfo[UIResponder.keyboardFrameEndUserInfoKey] as! CGRect
        let height = keyboardFrame.size.height
        self.bottomConstraint.constant = height
        
        //애니메이션 추가 (View가 먼저 올라가서 키보드 올라오는 공백이 순간적으로 보이는 문제로 추가)
        let animationDuration = notiInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as! TimeInterval
        
        UIView.animate(withDuration: animationDuration, animations: { [weak self] in
            self?.view.layoutIfNeeded()
        }) { (Bool) in
            
        }
}

@objc func keyboardWillHide(noti: NSNotification) {
		let notiInfo = noti.userInfo! as NSDictionary
        self.bottomConstraint.constant = 0
        
        let animationDuration = notiInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as! TimeInterval
        UIView.animate(withDuration: animationDuration, animations: { [weak self] in
            self?.view.layoutIfNeeded()
        }) { (Bool) in
            
        }
}

+ Recent posts