簡體   English   中英

如何使UINavigationBar背景透明?

[英]How to make UINavigationBar background transparent?

首先,我已經在How to make UINavigationBar Transparent in IOS 8? 中看到了所有答案。 Transparent UINavigationBarMake UINavigationBar transparent

它們似乎對我不起作用。

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

在此處輸入圖像描述

我正在使用(在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];

我明白了:

在此處輸入圖像描述

灰色狀態欄背景,完全白色的導航欄不與狀態欄融合,然后視圖開始。 其他問題答案中的所有“解決方案”對我來說都產生了相同的結果。

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

我怎樣才能讓我的導航欄透明而不弄亂一切?

更新:根據 Warif Akhand Rishi 的回答,我更改了self.navigationController.view.backgroundColor = [UIColor clearColor]; self.navigationController.navigationBar.backgroundColor = [UIColor clearColor]; ,現在我得到一個灰色的、統一的狀態/導航欄,但仍然不透明:

在此處輸入圖像描述

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

在此處輸入圖像描述

swift 4 透明導航欄:(確保視圖延伸到導航欄后面以顯示出來,否則只會是黑色)

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

或者只是將導航欄顏色與當前 vc 的顏色匹配,但保持不透明。 將半透明設置為 false 的子視圖將與導航欄對齊而不是在其下方。

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

改變你的

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

對此

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

好吧,經過一番掙扎,我已經自己解決了這個問題。 問題不止一個。 這不是關於延伸的邊緣,而是關於線self.navigationController.view.backgroundColor = [UIColor clearColor]; (必須是self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];正如 Warif Akhand Rishi 所建議的)以及我的表視圖的剪輯子視圖屬性。 我已經更改了那條線並關閉了我的表格視圖的剪裁,現在它按預期工作了。

對於 iOS 13 和 UINavigationBarAppearance API:

let navAppearance = UINavigationBarAppearance()
navAppearance.configureWithTransparentBackground()
self.navigationItem.standardAppearance = navAppearance

消除 5 行以上的陰影/背景/顏色代碼!

我來晚了一點,但我最近需要做同樣的事情,我發現下面的方法效果最好(因為它消除了你可能從堆棧中較低的東西中獲得的所有陰影和滲透):

guard let navBar = navigationController?.navigationBar else { return }
navBar.barStyle = .black
navBar.setBackgroundImage(UIImage(), for: .default)
navBar.shadowImage = UIImage()
navBar.isTranslucent = true
navBar.isHidden = false

1.你的NavigationBar是白色的,不是黑色的。所以你必須在NavigationBar下有一個視圖(白色視圖),它是你的greyView的父視圖。透明設置有效,但你看不到它,因為字體顏色是白色也。
2.所以你必須更新你的greyView的約束,所以它可以在導航欄下擴展。然后你可以看到你的白色標題。
3.也許你必須將statusBar的UIStatusBarStyle更改為default或lightcontent,我注意到statusBar的字體顏色也是白色的。

下面的代碼對我有用

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
self.navigationController?.view.backgroundColor = .clear
self.navigationController?.navigationBar.backgroundColor = .clear

暫無
暫無

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

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