Help us understand the problem. What is going on with this article?

iOS13でモーダルが2つ以上重なるとNavigationBarのレイアウトが崩れる

画面遷移する際に、UIModalPresentationStyleがデフォルトが.automaticで、その場合.pageSheetでの遷移が大半になると思います。

その際、UINavigationControllerが2つ重なった場合の.pageSheetを使った遷移でNavigationBarのHeightが変わってしまう問題に遭遇しました。

階層は下の画像の通りです。

スクリーンショット 2020-01-08 13.59.03.png

UINavigationContorllerのRootViewControllerから新たに別のUINavigationContorllerへ遷移しています。

選択されたNavigationBarの高さを見てみましょう。

スクリーンショット 2020-01-08 13.59.12.png

ふむ、Heightが56となっている。

では、もう一つ上の階層のUINavigationBarはどうなっているでしょうか。

スクリーンショット 2020-01-08 14.13.22.png

ここでNavigationBarの高さを見てみましょう。

スクリーンショット 2020-01-08 13.59.25.png

おや、Heightが44に変わってしまってるようです。。。

スクリーンショット 2020-01-08 13.59.47.png

起動してみると、妙な空白ができてます。
これではいけません。

対応策

ViewController.swift
override func viewDidLoad() {
    if #available(iOS 13.0, *) {
        navigationController?.navigationBar.setNeedsLayout()
    }
}

navigationBarのレイアウトを再計算するためのフラグを立てておきます。こうすることで、後続のライフサイクルで適切なHeightが適用されます。

Documentation about setNeedsLayout() by Apple

最近は#available(iOS 13.0, *)を書く機会が多い気がするな。。。

ご指摘などございましたら、コメントいただけると幸いです!

hachidoriinc
「すべての人に、価値ある仕事を」先端技術と上手く共存し、すべての人が、人間にしかできない「価値ある」仕事に集中できる世界を作りたい。そんな思いでhachidoriはサービスを提供しています。
https://hachidoriinc.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした