Keyboard에 의해 TextField가 가려지는 문제 - boostcampwm-2021/iOS04-OwnMyWay GitHub Wiki

문제 상황

  • TextField를 선택하면 키보드가 올라오면서 화면을 가리는 문제가 발생
  • 또한 Keyboard 바깥쪽을 선택해도 키보드가 내려가지 않아 답답한 문제가 발생

해결

  • Keyboard외의 바깥영역에 TapGestureRecognizer를 넣어줘서 어디를 클릭하든 키보드가 내려갈 수 있도록 해결
    • TapGesture를 전체 화면에 적용하게 되면 버튼이나 텍스트필드로 가야할 모든 Tap Gesture가 작동하지 않는 문제 발생
      • GestureRecognizer에는 cancelsTouchesInViews 라는 옵션이 존재해서 이것이 False가 되면 하위의 View로 TapGesture가 추가적으로 전달됨
  • 또한 키보드가 등장함에 따라 ScrollView의 Content Bottom Inset을 높여서 스크롤되는 화면의 영역을 줄임
  • 추가적으로 ScrollView가 보여지는 영역을 키보드가 눌린 View의 Frame으로 옮겨줌으로써 해결!
    • 이 때 어떤 View가 키보드를 호출했는지 알아내는 방법?
      • KeyboardWillShow Notification에는 어떤 View에서 호출됐는지 알수가 없음
      • FirstResponder의 개념을 활용해 키보드를 호출한 FirstResponder를 알아내고 그것이 TextField일 경우에만 스크롤뷰의 영역을 옮겨 보여주도록 설정