2016-01-10 145 views
5

首先, 我已經看到所有的答案在How to make UINavigationBar Transparent in IOS 8?Transparent UINavigationBarMake UINavigationBar transparent如何使UINavigationBar背景透明?

他們似乎並不適合我。

我經常視圖控制器沒有任何問題(試圖使導航欄透明前):

enter image description here

我使用(嘗試都在viewDidLoadviewWillAppear:):

[self.navigationController.navigationBar setBackgroundImage:[UIImage new] 
               forBarMetrics:UIBarMetricsDefault]; 
self.navigationController.navigationBar.shadowImage = [UIImage new]; 
self.navigationController.navigationBar.translucent = YES; 
self.navigationController.view.backgroundColor = [UIColor clearColor]; 

我得到這個:

enter image description here

灰色狀態欄背景,完全白色的導航欄不與狀態欄混合,然後視圖開始。對於其他問題'答案'的所有'解決方案'對我來說都會產生同樣的結果。

我也試過設置self.edgesForExtendedLayout = UIRectEdgeNone;self.edgesForExtendedLayout = UIRectEdgeAll;,但這也沒有任何影響。

如何讓我的導航欄透明而不會搞亂一切?

UPDATE:繼Warif Akhand仙人的回答,我已經改變了self.navigationController.view.backgroundColor = [UIColor clearColor];self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];,現在我就在一個灰色的,統一的狀態/導航欄,但仍不透明:

enter image description here

更新2:我連接了視圖調試器,並且灰色背景似乎來自視圖層次結構的深層內容,並且我的視圖內容沒有擴展。我試圖再次self.edgesForExtendedLayout = UIRectEdgeAll;了最新的代碼,但仍無濟於事:

enter image description here

+0

隱藏狀態欄怎麼樣? –

+1

在你的視圖控制器中,你是在頂杆下方延伸邊緣嗎? – beyowulf

+0

@SamB我不想隱藏狀態欄。 –

回答

2

好的,經過努力,我已經解決了我自己的問題。有不止一個問題。這不是關於延長邊緣,而是關於self.navigationController.view.backgroundColor = [UIColor clearColor];(必須是self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];,因爲Warif Akhand Rishi建議)以及我的表視圖的剪輯子視圖屬性。我改變了這一行,並關閉了我的表視圖的剪輯,現在它按預期工作。

0

試試這個代碼如下一行在你的控制器,願你的問題得到解決: -

self.extendedLayoutIncludesOpaqueBars = NO; 

self.automaticallyAdjustsScrollViewInsets = NO; 

And Remove this line :- self.edgesForExtendedLayout = UIRectEdgeNone 
+0

在很多地方嘗試過它('viewDidLoad','viewDidAppear:'...),不幸的是,沒有任何改變。 –

3

更改

self.navigationController.view.backgroundColor = [UIColor clearColor]; 

這個

self.navigationController.navigationBar.backgroundColor = [UIColor clearColor]; 
+0

現在它看起來更好(灰色,與狀態欄統一,但stil不透明) –

+0

測試'self.view.backgroundColor = [UIColor redColor];'如果您在視圖的頂部看到紅色。這意味着你的頂部有缺口。向上移動您的觀點。 (origin.y) –

0

1.您的NavigationBar是白色的,而不是黑色。所以您必須在NavigationBar下有一個視圖(白色視圖),它是您的greyView的超級視圖。透明設置有效,但您無法看到它,因爲fontcolor也是白色的。
2.所以你必須更新你的greyView的約束,所以它可以在導航條下擴展。然後你可以看到你的白色標題。
3.也許你必須改變你的statusBar的UIStatusBarStyle爲默認或lightcontent,我注意到statusBar的字體顏色也是白色的。

4

迅速4透明導航欄: (請務必查看後面的導航欄延伸到顯示通過,否則將只是黑色)

navigationController?.navigationBar.isTranslucent = true 
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) 
navigationController?.navigationBar.shadowImage = UIImage() //remove pesky 1 pixel line 

或只是匹配導航欄顏色到您當前VC的顏色,但保留它不透明。半透明設置爲假子視圖將與導航欄對齊,而不是置於其下。

navigationController?.navigationBar.isTranslucent = false 
navigationController?.navigationBar.barTintColor = UIColor.yourColor 
navigationController?.navigationBar.shadowImage = UIImage() //remove pesky 1 pixel line