透明导航栏的可见button

我已经看到了几个应用程序具有完全透明的导航栏,但与可见的button,我似乎无法find任何不会使button不可见的。 我敢肯定,他们使用UINavigationController的导航栏,因为它具有相同的animation与淡入淡出,什么不是。

我目前在ViewDidLoad和ViewDidAppear中使用此代码来隐藏或显示导航栏,因为它不应该在第一页 –

[self.navigationController setNavigationBarHidden:NO animated:YES]; 

和这个代码的透明度:

 [self.navigationController.navigationBar setAlpha:0.0]; 

创build一个UINavigationBar的子类,除了drawRect: 如果需要的话,将自定义的绘图代码放在那里,否则留空(但实现它)。

接下来,将UINavigationController的导航栏设置为这个子类。 在代码中使用initWithNavigationBarClass:toolBarClass:或者如果使用storyboard / nibs(它是侧边层次结构中的UINavigationController的子类),可以在Interface Builder中更改它。

最后,获取对导航栏的引用,以便我们可以在包含的视图控制器的loadView中使用self.navigationController.navigationBar对其进行configuration。 将导航栏的translucentYESbackgroundColor[UIColor clearColor] 。 下面的例子。

 //CustomNavigationBar.h #import <UIKit/UIKit.h> @interface CustomNavigationBar : UINavigationBar @end 

 //CustomNavigationBar.m #import "CustomNavigationBar.h" @implementation CustomNavigationBar - (void)drawRect:(CGRect)rect {} @end 

 //Put this in the implementation of the view controller displayed by the navigation controller - (void)viewDidLoad { [super viewDidLoad]; self.navigationController.navigationBar.translucent = YES; [self navigationController].navigationBar.backgroundColor = [UIColor clearColor]; } 

这是结果的屏幕截图,模仿瘟疫。

在这里输入图像说明

drawRect:中绘制蓝色边框drawRect:向您显示UINavigationBar在那里,而不仅仅是一个button和一个标签。 我实现了sizeThatFits:在子类中使高度更高。 button和标签都是UIView的包含正确的UI元素,作为UIBarButtonItems被放置在栏中。 我首先将它们embedded到视图中,这样我就可以改变它们的垂直alignment(否则当我实现sizeThatFits:时,它们会“卡”到底部)。

 self.navigationController.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)]; [self.navigationController.navigationBar setBackgroundImage:maskedImage forBarMetrics:UIBarMetricsDefault]; //remove shadow [[UINavigationBar appearance] setShadowImage: [[UIImage alloc] init]]; 

要使导航栏透明,请使用下面的代码:

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

之后,使用以下属性将导航栏的背景图像设置为与后面的视图相同:

 [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"SAMPLE.jpg"] forBarMetrics:UIBarMetricsDefault];