どうやらナビゲーションバーの高さを変更すると、iOS 11の新しいアプローチに直面しました。以前のiOSバージョンでは、デフォルトのナビゲーションバーを非表示にし、カスタムフレームで新しいナビゲーションバーを追加することでナビゲーションバーの高さを変更できました:
self.navigationController?.setNavigationBarHidden(true, animated: false)
let customNavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 64))
self.view.addSubview(customNavigationBar)
しかし、iOS 11 xCodeベータ版では機能していないようです。新しい高さが何であっても、常に44のままです。
これは私がxCode 9で持っているものです:
誰も問題を解決する方法を知っていますか?
これはAppleがバグを修正するまでのハックです。同じ問題に直面していたため、ナビゲーションバーの上部の制約を0から20に変更しました。
UINavigationBar backgroundColorが白以外の場合、ステータスバーの色は白のままになります。これを修正するには、その特定のUIViewControllerに以下を追加します。
let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
let statusBarColor = UIColor.red
statusBarView.backgroundColor = statusBarColor
view.addSubview(statusBarView)
これは長いハックのように見えますが、Xcode 8.3を使用して戻ってコンパイルするよりも優れています。
動作させる唯一の方法は、現在のカスタムナビゲーションバーを削除し、UIViewControllerに埋め込みUINavigationControllerを適用することでした。エディター->埋め込み-> Navigation Controller。
新しく作成されたNavigation Controllerプロパティのユーティリティ(右側のバー)メニューの「シミュレートされたメトリック」で、「トップバー」属性を指定する必要があります。私の場合、「不透明なナビゲーションバー」という値が必要でした。
また、念のため、UIViewControllerに「Top Bar」の同じ値を設定しています。
これにより、新しい「ナビゲーションアイテム」が自由に使用できるようになり、バーボタンアイテムを再度追加できます。
Xcode 9の更新が修正されるのを待っている間にできることは最高です。
IOS 11では、ナビゲーションバーの高さを変更できません。高さを増やしたい場合は、カスタムビューを使用する必要があります。