web-dev-qa-db-ja.com

iOS 11でナビゲーションバーの高さを変更するには?

どうやらナビゲーションバーの高さを変更すると、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で持っているものです:

enter image description here

誰も問題を解決する方法を知っていますか?

24
Mina

コードは正常に機能しており、問題はありません。 customNavigationBarの背景色を変更すると、目的の高さのナビゲーションバーが表示されることがわかります。しかし、デフォルトのナビゲーションバーを非表示にすることはXcode 9の問題のようです。

あなたのコード:

Xcode 9enter image description here

Xcode 8enter image description here

Xcode 9の画像でわかるように、カスタムナビゲーションバーはありますが、デフォルトのナビゲーションバーは非表示になりません。おそらくXcode 9のバグで、ストーリーボードでそれを隠すこともできませんでした。

これはXcode 9のバグのようで、バグレポートがAppleに提出されました。

12
Rashwan L

これはAppleがバグを修正するまでのハックです。同じ問題に直面していたため、ナビゲーションバーの上部の制約を0から20に変更しました。

前:enter image description here

After:enter image description here

UINavigationBar backgroundColorが白以外の場合、ステータスバーの色は白のままになります。これを修正するには、その特定のUIViewControllerに以下を追加します。

let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
let statusBarColor = UIColor.red
statusBarView.backgroundColor = statusBarColor
view.addSubview(statusBarView)

前:enter image description here

After:enter image description here

これは長いハックのように見えますが、Xcode 8.3を使用して戻ってコンパイルするよりも優れています。

12
Ameya Vichare

動作させる唯一の方法は、現在のカスタムナビゲーションバーを削除し、UIViewControllerに埋め込みUINavigationControllerを適用することでした。エディター->埋め込み-> Navigation Controller。

新しく作成されたNavigation Controllerプロパティのユーティリティ(右側のバー)メニューの「シミュレートされたメトリック」で、「トップバー」属性を指定する必要があります。私の場合、「不透明なナビゲーションバー」という値が必要でした。

また、念のため、UIViewControllerに「Top Bar」の同じ値を設定しています。

これにより、新しい「ナビゲーションアイテム」が自由に使用できるようになり、バーボタンアイテムを再度追加できます。

Xcode 9の更新が修正されるのを待っている間にできることは最高です。

1

IOS 11では、ナビゲーションバーの高さを変更できません。高さを増やしたい場合は、カスタムビューを使用する必要があります。

リファレンス: https://forums.developer.Apple.com/thread/88202

1
Bharath

ピクセル単位でサイズを変更する方法をまだ見つけていません。ただし、ダブルナビゲーションバーサイズ(XCode 10.1)を作成できます。

    self.navigationController?.navigationBar.prefersLargeTitles = true

結果:

enter image description here

1
Alex