如何使UINavigationBar背景透明?
How to make UINavigationBar background transparent?
首先,
我在 How to make UINavigationBar Transparent in IOS 8? Transparent UINavigationBar and 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];
我明白了:
灰色状态栏背景,完全白色的导航栏不与状态栏融合,然后视图开始。其他问题答案中的所有 'solutions' 对我来说都是相同的结果。
我也试过设置 self.edgesForExtendedLayout = UIRectEdgeNone;
或 self.edgesForExtendedLayout = UIRectEdgeAll;
但这也没有任何影响。
如何让我的导航栏透明而不弄乱一切?
更新: 根据 Warif Akhand Rishi 的回答,我已将 self.navigationController.view.backgroundColor = [UIColor clearColor];
更改为 self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
,现在我得到一个灰色的统一 status/navbar,但还是不透明:
更新 2: 我连接了视图调试器,灰色背景似乎来自视图层次结构的根部,而我的视图内容不是向上延伸。我用最新的代码再次尝试 self.edgesForExtendedLayout = UIRectEdgeAll;
但仍然无济于事:
改变你的
self.navigationController.view.backgroundColor = [UIColor clearColor];
至此
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
1.Your NavigationBar 是白色的,不是 black.So 你必须在 NavigationBar 下有一个视图(白色视图),它是你的 greyView.The 透明设置的父视图,但是你看不到,因为字体颜色也是白色的。
2.So 你必须更新你的 greyView 的约束,所以它可以在导航栏下扩展。然后你可以看到你的白色标题。
3.Maybe你必须把你的statusBar的UIStatusBarStyle改成default或者lightcontent,我注意到statusBar的字体颜色也是白色的。
好吧,经过千辛万苦,我自己解决了这个问题。问题不止一个。这不是关于延伸的边缘,而是关于线 self.navigationController.view.backgroundColor = [UIColor clearColor];
(必须是 self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
正如 Warif Akhand Rishi 所建议的那样)以及我的 table 视图的剪辑子视图 属性.我已经更改了那条线并关闭了我的 table 视图的剪裁,现在它按预期工作了。
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?.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
我来晚了一点,但我最近需要做同样的事情,我发现下面的方法实际上效果最好(因为它消除了你可能从较低的东西中获得的所有阴影和渗色堆栈):
guard let navBar = navigationController?.navigationBar else { return }
navBar.barStyle = .black
navBar.setBackgroundImage(UIImage(), for: .default)
navBar.shadowImage = UIImage()
navBar.isTranslucent = true
navBar.isHidden = false
对于 iOS 13 和 UINavigationBarAppearance API:
let navAppearance = UINavigationBarAppearance()
navAppearance.configureWithTransparentBackground()
self.navigationItem.standardAppearance = navAppearance
消除 5 行以上的 shadow/background/color 代码!
首先, 我在 How to make UINavigationBar Transparent in IOS 8? Transparent UINavigationBar and 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];
我明白了:
灰色状态栏背景,完全白色的导航栏不与状态栏融合,然后视图开始。其他问题答案中的所有 'solutions' 对我来说都是相同的结果。
我也试过设置 self.edgesForExtendedLayout = UIRectEdgeNone;
或 self.edgesForExtendedLayout = UIRectEdgeAll;
但这也没有任何影响。
如何让我的导航栏透明而不弄乱一切?
更新: 根据 Warif Akhand Rishi 的回答,我已将 self.navigationController.view.backgroundColor = [UIColor clearColor];
更改为 self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
,现在我得到一个灰色的统一 status/navbar,但还是不透明:
更新 2: 我连接了视图调试器,灰色背景似乎来自视图层次结构的根部,而我的视图内容不是向上延伸。我用最新的代码再次尝试 self.edgesForExtendedLayout = UIRectEdgeAll;
但仍然无济于事:
改变你的
self.navigationController.view.backgroundColor = [UIColor clearColor];
至此
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
1.Your NavigationBar 是白色的,不是 black.So 你必须在 NavigationBar 下有一个视图(白色视图),它是你的 greyView.The 透明设置的父视图,但是你看不到,因为字体颜色也是白色的。
2.So 你必须更新你的 greyView 的约束,所以它可以在导航栏下扩展。然后你可以看到你的白色标题。
3.Maybe你必须把你的statusBar的UIStatusBarStyle改成default或者lightcontent,我注意到statusBar的字体颜色也是白色的。
好吧,经过千辛万苦,我自己解决了这个问题。问题不止一个。这不是关于延伸的边缘,而是关于线 self.navigationController.view.backgroundColor = [UIColor clearColor];
(必须是 self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
正如 Warif Akhand Rishi 所建议的那样)以及我的 table 视图的剪辑子视图 属性.我已经更改了那条线并关闭了我的 table 视图的剪裁,现在它按预期工作了。
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?.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
我来晚了一点,但我最近需要做同样的事情,我发现下面的方法实际上效果最好(因为它消除了你可能从较低的东西中获得的所有阴影和渗色堆栈):
guard let navBar = navigationController?.navigationBar else { return }
navBar.barStyle = .black
navBar.setBackgroundImage(UIImage(), for: .default)
navBar.shadowImage = UIImage()
navBar.isTranslucent = true
navBar.isHidden = false
对于 iOS 13 和 UINavigationBarAppearance API:
let navAppearance = UINavigationBarAppearance()
navAppearance.configureWithTransparentBackground()
self.navigationItem.standardAppearance = navAppearance
消除 5 行以上的 shadow/background/color 代码!