現在、iOS 13でモーダルプレゼンテーションを使用すると、ナビゲーションバーのサイジングに問題があります。
このスクリーンショットでわかるように、ほとんどの場合、これは正常に機能します。
ただし、いくつかの画面では、この奇妙な効果が得られます。ナビゲーションバーの高さが低く、ビューとの間に「シースルー」の奇妙なギャップがあります。このスクリーンショットに見られるように:
両方のビューコントローラーのプロパティに同じ値が設定され、モーダルに表示され、サブビューに同じ制約があります(superview/margins/topレイアウトガイドからの間隔は0)。
この問題は、iOS 13 SDKでビルドした場合でも、iOS 12では発生しません。これはiOS 13(ベータ8)の既知の問題ですか、それともコード/ストーリーボードで調整する必要がありますか?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if #available(iOS 13.0, *) {
navigationController?.navigationBar.setNeedsLayout()
}
}
here の周りにこの作業が見つかり、うまくいきました。
ロッドの答えのように、私はそれが私が次のメインスレッドrunLoopにsetNeetsLayout()を入れた場合にのみ機能することを発見しました:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Workaround for iOS 13 modal gap below navigationbar
if #available(iOS 13.0, *) {
DispatchQueue.main.async {
self.navigationController?.navigationBar.setNeedsLayout()
}
}
}