iOS 개발하며 프레임워크의 완성도가 안드로이드에 비해 좋다고 느끼고 있다.
단 하나만 빼고.

안드로이드의 EditText에 해당하는 입력 필드인 TextField에 입력할 때 키보드가 올라오면서 레이아웃을 덮어버린다.

그래서 화면 하단에 입력창이 있을 때 내가 뭘 쓰는지 보이지 않는다. 게다가 입력창 옆에 버튼이라도 있으면 누를 수가 없다.
엔터키 동작을 오버라이드 하지 않으면 키보드를 내릴 수 조차 없다.

이 현상에 대해 검색해 보면 여러가지 방법이 나오는데 가장 많이 나오는 것은 다음과 같다.

  • NotificationCenter를 이용한 방법

그리고 RxKeyboard 라이브러리를 사용하는 방법이 있는데 이게 훨씬 깔끔하다.
https://github.com/RxSwiftCommunity/RxKeyboard

RxKeyboard는 키보드의 길이를 리액티브하게 알려주는 라이브러리이다.

키보드의 길이를 화면 하단의 제약에 더해 주기만 하면 키보드가 보이면 화면이 올라가고, 키보드가 사라지면 화면이 내려간다.

하단에 8만큼 제약이 있는 경우 제약을 bottomConstraint 라는 IBOutlet으로 연결한 경우
삽질 했던 여러가지 방법 중 가장 심플한 것 같아 기록해 둔다.

import RxKeyboard
...
@IBOutlet weak var bottomConstraint: NSLayoutConstraint!
...
RxKeyboard.instance.visibleHeight
    .drive(onNext: { keyboardVisibleHeight in
        self.bottomConstraint.constant = keyboardVisibleHeight + 8
    }).disposed(by: disposeBag)