2017-09-10 88 views
17

顯然改變的導航欄高度面臨着一種新的方法在iOS的11 在以前的IOS版本,有可能通過隱藏默認的導航欄,添加一個新的自定義框架改變的導航欄高度:如何更改iOS 11中的navigationBar高度?

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

沒有人知道如何解決這個問題?

回答

11

你的代碼工作正常,它沒有錯。如果您更改customNavigationBar的背景顏色,您會看到您將獲得具有所需高度的導航欄。但它似乎是Xcode 9隱藏默認導航欄的問題。

你的代碼:

的Xcode 9 enter image description here

的Xcode 8 enter image description here

,你可以在Xcode的9圖像中看到,你有自定義導航欄,但默認一個不隱藏。可能是Xcode 9中的一個bug,我沒有設法通過Storyboard隱藏它。

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

+0

是的,我只看到xcode 9 for iOS11的問題。它也隱藏默認導航欄並添加自定義,但問題是高度不會更改爲新的。 – Mina

+0

@Mina,它的確如此。自定義導航欄是您在Xcode 9圖像中看到的綠色區域。 –

+0

我已經用圖像更新了我的問題。 我還添加了'''customNavigationBar.backgroundColor = .red self.navigationController?.navigationBar.barTintColor = .purple self.navigationController?.navigationBar.barTintColor = .yellow''' 但你可以看到導航酒吧的顏色沒有變成紫色或黃色,所以我認爲它隱藏了默認的導航欄。正如你可以看到標題被添加到自定義的標題而不是默認的標題 – Mina

0

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

在新創建的導航控制器屬性上,在Utilities(右側欄)菜單'Simulated Metrics'中,必須指定'Top Bar'屬性。在我的情況下,我需要的價值:'不透明導航欄'。

我也在我的UIViewController上設置了'Top Bar'的值,只是爲了確保。

通過這樣做,一個新的「導航項目」將在您的處置,您可以重新添加您的酒吧按​​鈕項目。

這是我可以做的最好的,當我們等待Xcode 9更新來解決它。

+0

「Simulated Metrics」僅在IDE中工作,不在構建的應用程序中,不是嗎? – SoftDesigner

+0

確切地說,只是想知道會顯示什麼。 –

10

這是更多的黑客,直到蘋果修復錯誤。我面臨同樣的問題,所以我將導航欄的頂部約束從0更改爲20。

前: enter image description here

後: 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

後: enter image description here

這似乎是一個漫長的黑客攻擊,但仍高於回去和使用的Xcode 8.3編譯更好。

+0

它增加了被蘋果拒絕的可能性。 – Mina

+0

Apple只會拒絕那些使用私有API的應用程序,這些應用程序不建議公開使用。話雖如此,你可以採用這種風格,直到Apple解決問題。 –

+1

這是一個堅實的解決方案,直到蘋果決定修復這個bug。感謝發佈! –

相關問題