[英]How to make UINavigationBar background transparent?
首先,我已經在How to make UINavigationBar Transparent in IOS 8? 中看到了所有答案。 Transparent UINavigationBar和Make UINavigationBar transparent 。
它們似乎對我不起作用。
我的常規視圖控制器(在嘗試使導航欄透明之前)沒有任何問題:
我正在使用(在viewDidLoad
和viewWillAppear:
中都嘗試過):
[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.