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으로부터의 조작에 의해,
갑자기 테더링시의 표시로 전환하기 위해,
화면 초기 표시시의 기저 뷰의 높이도 맞지 않습니다.
이들에 유연하게 대응하기 위해서는,AutoLayout
와 NSLayoutConstraint
로 화면을 정의하고,
자동으로 크기와 위치를 조정하거나,NSLayoutConstraint
로 상한/하한 등을 정의등의 대책이 된다고 생각됩니다.
추가: 대책안 2
표시만의 문제로, 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으로부터의 조작에 의해,
갑자기 테더링시의 표시로 전환하기 위해,
화면 초기 표시시의 기저 뷰의 높이도 맞지 않습니다.
이들에 유연하게 대응하기 위해서는,AutoLayout
와 NSLayoutConstraint
로 화면을 정의하고,
자동으로 크기와 위치를 조정하거나,NSLayoutConstraint
로 상한/하한 등을 정의등의 대책이 된다고 생각됩니다.
추가: 대책안 2
(실제로 코드를 써 대책안을 검증한 것은 아니기 때문에, 현 단계에서는 안만입니다)
画面の大きさを取得し、それを元に表示領域を判定する
테더링 시 표시 영역이 좁아지면,화면 자체의 크기는 변하지 않기 때문에,
표시 및 UI 조작에 문제가 발생할 수 있습니다.
또, 앱 화면 표시중에 다른 iPhone으로부터의 조작에 의해,
갑자기 테더링시의 표시로 전환하기 위해,
화면 초기 표시시의 기저 뷰의 높이도 맞지 않습니다.
이들에 유연하게 대응하기 위해서는,
AutoLayout
와 NSLayoutConstraint
로 화면을 정의하고,자동으로 크기와 위치를 조정하거나,
NSLayoutConstraint
로 상한/하한 등을 정의등의 대책이 된다고 생각됩니다.추가: 대책안 2
OS가 사용하는 상태 표시 줄의 표시 영역 변경을 감지 할 수 있으므로,
앱 화면 표시 중인
突然のテザリング表示への切り替わり
에 대응할 수 있습니다.추가: 메모
Reference
이 문제에 관하여(iPhone에서 테더링시 UI의 표시 무너짐을 보았기 때문에 원인을 찾아본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/www51k/items/015bbb5c687925ff2f19텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)