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일 경우에만 스크롤뷰의 영역을 옮겨 보여주도록 설정