簡體   English   中英

如何在 iOS 11 中更改導航欄高度?

[英]How to change navigationBar height in 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 beta。 不管新的高度是多少,都會一直保持在44。

這是我在 xCode 9 中得到的:

在此處輸入圖片說明

有誰知道如何解決問題?

您的代碼運行良好,沒有任何問題。 如果您更改customNavigationBar的背景顏色,您customNavigationBar看到您將獲得具有所需高度的導航欄。 但是隱藏默認導航欄似乎是 Xcode 9 的一個問題。

您的代碼:

Xcode 9 在此處輸入圖片說明

Xcode 8 在此處輸入圖片說明

正如您在 Xcode 9 圖像中看到的,您擁有自定義導航欄,但默認導航欄不會隱藏。 可能是 Xcode 9 中的一個錯誤,我也沒有設法通過故事板隱藏它。

這似乎是 Xcode 9 中的一個錯誤,錯誤報告已提交給 Apple。

在 Apple 修復該錯誤之前,這更像是一種黑客攻擊。 我遇到了同樣的問題,所以我將導航欄的頂部約束從 0 更改為 20。

之前: 在此處輸入圖片說明

之后: 在此處輸入圖片說明

如果您的 UINavigationBar backgroundColor 不是白色,這將使狀態欄保持白色。 您可以通過在該特定 UIViewController 中添加以下內容來解決此問題。

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

之前: 在此處輸入圖片說明

之后: 在此處輸入圖片說明

這似乎是一個漫長的 hack,但仍然比返回並使用 Xcode 8.3 編譯要好。

我可以讓它工作的唯一方法是刪除當前的自定義導航欄,並將嵌入的 UINavigationController 應用到 UIViewController。 編輯器 -> 嵌入 -> 導航控制器。

在新創建的 Navigation Controller 屬性上,必須在 Utilities(右側欄)菜單“Simulated Metrics”上指定“Top Bar”屬性。 就我而言,我需要這個值:“不透明導航欄”。

我還在 UIViewController 上設置了相同的 'Top Bar' 值,只是為了確保。

通過這樣做,您將可以使用一個新的“導航項”,並且您可以重新添加您的欄按鈕項。

在我們等待 Xcode 9 更新修復它時,這是我能做的最好的事情。

在 iOS 11 中我們無法更改導航欄高度,如果您想增加高度,我們應該使用自定義視圖。

參考: https : //forums.developer.apple.com/thread/88202

仍然沒有找到如何以像素為單位更改它的大小。 但這可以創建雙導航欄大小(XCode 10.1):

    self.navigationController?.navigationBar.prefersLargeTitles = true

結果:

在此處輸入圖片說明

這個答案為我完成了工作。

navigationController.navigationBar.setTitleVerticalPositionAdjustment(CGFloat(10),
forBarMetrics: UIBarMetrics.Default)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM