늘모자란, 개발 :: iOS11 keyboard issue - when you are using window setHidden

늘모자란, 개발

iOS 코드중
[self.window setHidden] 옵션을 사용하는 경우가 있다. 파라미터에 NO를 줘 AppDelegate 에서 사용할 경우 앱이 새카맣게 되는 효과가 생긴다.
즉 화면이 내려갈때 창을 감춰버리기때문에 한순간도 보이지 않게 하는 효과를 낼수도 있지만 사실 거의 사용할 일은 없을 것 같은 기능이다.

이번에 회사앱을 만들면서 길고 긴 키보드 이슈가 있었는데, 앱에서 키보드를 치다가 홈버튼으로 나갔다 들어오면 키보드를 더 이상 사용할 수 없게 되는 황당한 버그였다.

이 문제의 결론은 iOS11에서 변경된 사항으로 인해 일어나는 버그였었는데, 내가 직접 테스트 해본건 아니고 벤더사의 메일 내용을 대부분 인용해서 블로깅한다. (아마 관계자 분들께서 들리실 수도 있을 것같다. 이런 삽질은 정말.. 유니크하다...)


1. [self.window setHidden:YES]


해당 코드가 실행되면 window의 visible의 false로 변경되며 key window도 아니게 된다
이 상태에서 [self.window setHidden:NO]를 실행하게 되면 iOS10과 iOS11에서 동작하는 로직이 달라 문제가 생긴다

2. iOS10


해당 윈도우 visible이 true가 되며 key widnow로 변경됨

3. iOS11


key window로 변경되지 않음 = 키보드 관련 이벤트가 동작하지 않는다


해결


iOS10과 11이상의 버전에서 달리 이벤트를 처리한다

iOS10 이하에서는
[self.window setHidden:NO];

만 사용해도 좋다.

iOS11에서는 다음과 같이 변경한다
[self.window setHidden:NO];
[self.window makeKeyWindow];


혹은,

[self.window makeKeyVisible];


로 작성하면 정상적으로 사용이 가능하다
2017/09/11 16:22 2017/09/11 16:22