iPhone에서 테더링시 UI의 표시 무너짐을 보았기 때문에 원인을 찾아본다

iPhone에서 테더링



iPhone에서의 테더링시에는 화면 상부에 OS측에서 사용하는 영역이 늘어난다.インターネット共有: X台接続中 만큼 화면이 세로로 좁아집니다.


정상시
테더링 시








이것이 영향을 받고, 다음과 같은 거동의 앱을 비교해 볼 수 있다.
- 스플래시 화면 로고의 중단이 무너진다.
- 스크롤이 맨 위/맨 아래로 스크롤할 수 없음
- 화면 상단이 부서진다.
- 바닥글 버튼 군이 일부 밖에 표시되지 않는다
- 아래 스크롤시 바닥글 버튼군이 숨어 있는 동작을 하는 경우, 위 스크롤로 바닥글 버튼군이 일부밖에 표시되지 않는다


정상시
테더링 시






원인을 추측해보기



표시만의 문제로, UI 조작 자체에는 문제가 없으므로,
높이 취득에 문제가 있다고 추측한다.

검증



코드로 통상시/테더링시의 화면의 높이를 취득한다.
검증시의 단말:iPhone 8 Plus(iOS12.3.2)


높이 획득
코드
정상시
테더링 시


화면 높이
UIScreen.main.bounds.size.height
568
568

디스플레이 높이
UIScreen.main.nativeBounds.size.height
1481년
1481년

기본 뷰 높이
ViewController#view.frame.height
568
548


차이가 있는 것은, 기저 view의 높이만.

iPhone X 시리즈에서 검증을하지 않았지만,
외형에서는 테더링시에 OS가 사용하는 영역은 변하지 않기 때문에,
표시상의 문제는 없을 것 같습니다.
(테더링 시에는 Safe Area의 표시 영역이 변함없이 외형이 바뀔 뿐입니다)

대책안



(실제로 코드를 써 대책안을 검증한 것은 아니기 때문에, 현 단계에서는 안만입니다)
画面の大きさを取得し、それを元に表示領域を判定する테더링 시 표시 영역이 좁아지면,
화면 자체의 크기는 변하지 않기 때문에,
표시 및 UI 조작에 문제가 발생할 수 있습니다.

또, 앱 화면 표시중에 다른 iPhone으로부터의 조작에 의해,
갑자기 테더링시의 표시로 전환하기 위해,
화면 초기 표시시의 기저 뷰의 높이도 맞지 않습니다.

이들에 유연하게 대응하기 위해서는,AutoLayoutNSLayoutConstraint 로 화면을 정의하고,
자동으로 크기와 위치를 조정하거나,NSLayoutConstraint 로 상한/하한 등을 정의등의 대책이 된다고 생각됩니다.

추가: 대책안 2


  • UIApplication.didChangeStatusBarFrameNotification

  • OS가 사용하는 상태 표시 줄의 표시 영역 변경을 감지 할 수 있으므로,
    앱 화면 표시 중인 突然のテザリング表示への切り替わり 에 대응할 수 있습니다.

    추가: 메모


  • 테더링 외에도 통화중인 앱 조작도 마찬가지로 화면 상단의 상태 표시 줄 영역이 늘어납니다
  • iOS 시뮬레이터의 Hardware/Toggle in-call Status Bar로 재현 할 수 있기 때문에 실제 기계 검증보다 간편
  • 좋은 웹페이지 즐겨찾기