Swift
[Swift] keyboard 에 따라 화면 동적으로 움직이기
hyeonii_12
2020. 4. 21. 13:51
반응형
추후 보기 좋게 글을 다듬어 갈 예정
inputTextField.delegate = self
NotificationCenter.default.addObserver(self, selector:#selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector:#selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
로 text field delegate 등록 및 옵저버 등록
@objc private func keyboardWillShow(_ notification: Notification) {
// 키보드가 생성될 때
}
@objc private func keyboardWillHide(_ notification: Notification) {
// 키보드가 사라질 때
}
위의 주석 처리 된 부분에 키보드로 인해 변경되는 부분들을 작성해주면 되는데
두 가지 방법이 있다.
- 영향 받는 아이들의 위치를 옮기는 방법
- view의 하단 constraint를 수정하는 방법
나는 화면의 맨 하단에 inputTextField로 등록한 UITextField와 inputButton으로 등록한 UIButton을 가지고 있다.
따라서 1. 영향 받는 아이들(텍스트 필드와 버튼)의 위치를 옮기기 위해서는
// keyboardWillShow
if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardHeight = keyboardFrame.cgRectValue.height
inputTextField.frame.origin.y -= keyboardHeight
inputButton.frame.origin.y -= keyboardHeight
}
// keyboardWillHide
if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardHeight = keyboardFrame.cgRectValue.height
inputTextField.frame.origin.y += keyboardHeight
inputButton.frame.origin.y += keyboardHeight
}
로 수정할 수 있다.
또한, 2. view의 하단 constraint를 수정하는 방법을 이용하고 싶다면
bottomConstraint로 등록한 NSLayoutConstraint를 outlet으로 설정하고
// keyboardWillShow
if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardHeight = keyboardFrame.cgRectValue.height
bottomConstraint.constant = keyboardHeight
self.view.layoutIfNeeded()
}
// keyboardWillHide
bottomConstraint.constant = 0
self.view.layoutIfNeeded()
로 수정하면 된다.
애초에 view의 맨 하단의 constraint가 0이었기 때문에 다시 계산할 필요가 없어서 키보드가 사라질 때는 키보드 높이를 구하지 않아도 된다.
혹시나 최초에 위 내용대로 설정을 했는데도 시뮬레이터에서 키보드가 움직이지 않는 경우,
I/O > Keyboard > Toggle Software Keyboard (단축키 Command + K)로 한 번 키보드를 띄우고 나면 그 뒤로는 이상 없이 키보드가 나타나고 사라진다.
반응형