iOS 13에서 모드를 겹칠 때 탐색 모음의 높이에 문제가 있음

2893 단어 SwiftiOS13
작업 중 제작된 다점포 체인점 커뮤니케이션을 해결하는 애플리케이션인'매장 노트'은 iOS 13에 대응했다.
iOS 13의 모드 디스플레이 화면은 아이폰의 모든 화면에 모드가 표시되는 것이 아니라 아래 화면에서 약간 작아지고 중첩된 디스플레이로 알려져 있다.
세그의 프레젠테이션 기본값이 풀 스크린에서 오토매틱으로 바뀌었기 때문에 iOS 12 이전과 같은 디스플레이를 하려면 풀 스크린으로 설정하면 되지만, 아래쪽 스왑으로 화면을 끄는 자세가 너무 편리해 Automatic에 대응하기로 했다.

모드를 많이 하면 네비게이션 표시줄의 높이가 높아져요.


제작을 시도하면 모드에서 모드를 한층 더 여는 장면에서 두 번째 모드의 UINaviationBar의 높이가 더욱 작아진다.

해결책


모드로 표시된 한쪽 보기 viewWillAppear(_ animated: Bool) 에서 내비게이션 표시줄을 숨기고 바로 표시하면 고칠 수 있습니다.
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // [HACK]
    // iOS13 iPhone でふたつめのモーダルとして重なると
    // UINavigationBar のサイズ計算がおかしく、バーの下に隙間が空いて描画される。
    // このタイミングで非表示・表示を繰り返すと直せるのでこの処理を追加。
    if #available(iOS 13.0, *) {
        self.navigationController?.isNavigationBarHidden = true
        DispatchQueue.main.async {
            [weak self] in
            if let wself = self {
                wself.navigationController?.isNavigationBarHidden = false
            }
        }
    }
}
이외에도 어두운 모드에 대응해 아이패드OS의 사파리의 User-Agent 문자열은 맥OS의 사파리와 똑같습니다. 이번 업데이트로 많은 것을 배웠습니다.
Happy hacking life!

좋은 웹페이지 즐겨찾기