티스토리 뷰

추후 보기 좋게 글을 다듬어 갈 예정


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) {
      // 키보드가 사라질 때
    }

 

위의 주석 처리 된 부분에 키보드로 인해 변경되는 부분들을 작성해주면 되는데
두 가지 방법이 있다.

  1. 영향 받는 아이들의 위치를 옮기는 방법
  2. 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)로 한 번 키보드를 띄우고 나면 그 뒤로는 이상 없이 키보드가 나타나고 사라진다.

댓글