使UINavigationBar透明

你如何使UINavigationBar透明 ? 虽然我希望它的酒吧项目保持可见。

如果有人想知道如何在iOS 7+中实现这一点,这里有一个解决scheme(iOS 6兼容)

在Objective-C中

[self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; self.navigationBar.shadowImage = [UIImage new]; self.navigationBar.translucent = YES; 

在swift 3(iOS 10)

 self.navigationBar.setBackgroundImage(UIImage(), for: .default) self.navigationBar.shadowImage = UIImage() self.navigationBar.isTranslucent = true 

在迅速2

 self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) self.navigationBar.shadowImage = UIImage() self.navigationBar.translucent = true 

讨论

由于UINavigationBar文档中讨论的行为,在导航栏上将translucent设置为YES实现这一function。 我会在这里报告相关的片段:

如果在具有不透明的自定义背景图像的导航栏上将此属性设置为YES ,则导航栏会将小于1.0的系统不透明度应用于图像。

在iOS5中,您可以这样做,使导航栏透明:

 nav.navigationBar.translucent = YES; // Setting this slides the view up, underneath the nav bar (otherwise it'll appear black) const float colorMask[6] = {222, 255, 222, 255, 222, 255}; UIImage *img = [[UIImage alloc] init]; UIImage *maskedImage = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(img.CGImage, colorMask)]; [nav.navigationBar setBackgroundImage:maskedImage forBarMetrics:UIBarMetricsDefault]; [img release]; 

从IOS7:

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

对于任何想在Swift 2.x中执行此操作的人:

 self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.translucent = true 

或Swift 3.x:

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

这似乎工作:

 @implementation UINavigationBar (custom) - (void)drawRect:(CGRect)rect {} @end navigationController.navigationBar.backgroundColor = [UIColor clearColor]; 

我知道这个主题是旧的,但如果人们想知道如何完成,没有重载drawRect方法。

这是你需要的:

 self.navigationController.navigationBar.translucent = YES; self.navigationController.navigationBar.opaque = YES; self.navigationController.navigationBar.tintColor = [UIColor clearColor]; self.navigationController.navigationBar.backgroundColor = [UIColor clearColor]; 

在做了上面所有人的说明之后,即:

 navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .default) navigationController?.navigationBar.shadowImage = UIImage() navigationController!.navigationBar.isTranslucent = true 

我的导航栏还是白色的 所以我加了这一行:

 navigationController?.navigationBar.backgroundColor = .clear 

等瞧! 这似乎是诀窍。

尝试下面的一段代码:

 self.navigationController.navigationBar.translucent = YES; 

下面的代码展开了为这个线程select的最佳答案,以摆脱下边框和设置文本颜色:

  1. 此代码的最后两个编码行设置透明度。 我借用了这个线程的代码,它完美的工作!

  2. “clipsToBounds”属性是我find的代码,它没有设置透明度(或所以如果你决定去一个纯白色/黑色/等背景,而不会有边界线)摆脱底部边界线。

  3. “tintColor”行(第二条编码行)将我的后退button设置为浅灰色

  4. 我保留barTintColor作为备份。 我不知道透明度为什么不起作用,但如果不行的话,我想要我的白色,就像我以前那样

     var navigationBarAppearace = UINavigationBar.appearance() navigationBarAppearace.tintColor = UIColor.lightGrayColor() navigationBarAppearace.barTintColor = UIColor.whiteColor() navigationBarAppearace.clipsToBounds = true navigationBarAppearace.translucent = true navigationBarAppearace.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) navigationBarAppearace.shadowImage = UIImage() 

对于Swift 3.0:

 override func viewDidLoad() { super.viewDidLoad() navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) navigationController?.navigationBar.shadowImage = UIImage() navigationController?.navigationBar.isTranslucent = true } 

C#/ Xamarin解决scheme

 NavigationController.NavigationBar.SetBackgroundImage(new UIImage(), UIBarMetrics.Default); NavigationController.NavigationBar.ShadowImage = new UIImage(); NavigationController.NavigationBar.Translucent = true; 

你的意思是完全透明的,还是使用照片应用中看到的半透明黑色风格? 后者可以通过将barStyle属性设置为barStyleUIBarStyleBlackTranslucent 。 前者…我不确定。 如果您希望它上面的项目仍然可见,则可能需要在酒吧的视图层次结构中进行一些挖掘,并移除包含其背景的视图。

另一种方法,我的工作是子类UINavigationBar并将drawRect方法留空!

 @IBDesignable class MONavigationBar: UINavigationBar { // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. override func drawRect(rect: CGRect) { // Drawing code }} 

这适用于Swift 2.0。

 navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) navigationController!.navigationBar.shadowImage = UIImage() navigationController!.navigationBar.translucent = true