Objective c 带有透明导航栏的可见按钮

Objective c 带有透明导航栏的可见按钮,objective-c,ios,Objective C,Ios,我见过几个应用程序有完全透明的导航栏,但有可见的按钮,我似乎找不到任何不会使按钮隐形的东西。我敢肯定他们在导航栏上使用的是UINavigationController,因为它的动画和淡入淡出的动画是一样的 我现在在ViewDidLoad和ViewDid中使用此代码来隐藏或显示导航栏,因为导航栏不应该在第一页上- [self.navigationController setNavigationBarHidden:NO animated:YES]; 本守则的透明度如下: [self.navigat

我见过几个应用程序有完全透明的导航栏,但有可见的按钮,我似乎找不到任何不会使按钮隐形的东西。我敢肯定他们在导航栏上使用的是UINavigationController,因为它的动画和淡入淡出的动画是一样的

我现在在ViewDidLoad和ViewDid中使用此代码来隐藏或显示导航栏,因为导航栏不应该在第一页上-

[self.navigationController setNavigationBarHidden:NO animated:YES];
本守则的透明度如下:

[self.navigationController.navigationBar setAlpha:0.0];
创建UINavigationBar的子类,该子类不包含除drawRect以外的任何方法:。如果需要,请将自定义图形代码放在那里,否则将其保留为空,但请实现它

接下来,将UINavigationController的导航栏设置为该子类。在代码中使用initWithNavigationBarClass:toolBarClass:或在界面生成器中更改它(如果您使用的是序列图像板/NIB),它是侧面层次结构中UINavigationController的子类

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

//CustomNavigationBar.h
#import <UIKit/UIKit.h>

@interface CustomNavigationBar : UINavigationBar
@end
这是模拟瘟疫的结果截屏

蓝色边框是在drawRect中绘制的:用于向您显示UINavigationBar,而不仅仅是按钮和标签。我在子类中实现了sizeThatFits:以使条更高。按钮和标签都是UIView,包含作为UIBarButtonItems放置在栏中的正确UI元素。我首先将它们嵌入视图中,以便可以更改它们的垂直对齐方式,否则在实现sizeThatFits:时它们会粘在底部。

创建UINavigationBar的子类,该子类不包含除drawRect:之外的任何方法。如果需要,请将自定义图形代码放在那里,否则将其保留为空,但请实现它

接下来,将UINavigationController的导航栏设置为该子类。在代码中使用initWithNavigationBarClass:toolBarClass:或在界面生成器中更改它(如果您使用的是序列图像板/NIB),它是侧面层次结构中UINavigationController的子类

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

//CustomNavigationBar.h
#import <UIKit/UIKit.h>

@interface CustomNavigationBar : UINavigationBar
@end
这是模拟瘟疫的结果截屏


蓝色边框是在drawRect中绘制的:用于向您显示UINavigationBar,而不仅仅是按钮和标签。我在子类中实现了sizeThatFits:以使条更高。按钮和标签都是UIView,包含作为UIBarButtonItems放置在栏中的正确UI元素。我首先将它们嵌入视图中,以便更改它们的垂直对齐方式,否则在我实现sizeThatFits:时它们会粘在底部。

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

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];

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

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];

我很难想象一个带有可见按钮的不可见导航栏看起来不会很奇怪。你能举一个你想要的行为的应用程序的例子吗?游戏“瘟疫”是我脑海中唯一能记得的。奇怪之处完全取决于你如何设计你的界面。我很难想象一个带有可见按钮的不可见导航栏看起来会不会真的很奇怪。你能举一个你想要的行为的应用程序的例子吗?游戏“瘟疫”是我脑海中唯一能记得的。奇怪之处完全取决于你如何设计你的界面。如果你的应用程序运行5.0及更高版本,请使用UIAppearance。drawRect无法在iOS 5或更高版本上运行。您确定吗?drawRect:在iOS 5中被调用,只要你在一个子类中实现它,如果你滑动它,它就不会被调用,所以这对于自定义绘图应该很好,不是吗?我现在正在iOS 5.1模拟器中使用一个,它工作正常。drawRect:被调用,并且该栏是完全透明的。@nanjunda我刚刚在导航栏中为自定义绘图实现了drawRect:并且在iOS 5中工作得非常好。没关系,除非文件上说不要这样做。苹果甚至告诉我们将UINavigationBar子类化以使用drawRect:而且在iOS 5中,swizzling不再起作用。为什么不告诉我们它不起作用?无论是否绘制,都必须实现drawRect:否则,将UINavigationBar的背景色设置为clear将生成黑色或半色调
透明灰色条,取决于是否设置了半透明。这样的应用程序会被拒绝吗?或者它是否足够接近苹果的指导原则?如果应用程序运行5.0及更高版本,请使用UIAppearance。drawRect无法在iOS 5或更高版本上运行。您确定吗?drawRect:在iOS 5中被调用,只要你在一个子类中实现它,如果你滑动它,它就不会被调用,所以这对于自定义绘图应该很好,不是吗?我现在正在iOS 5.1模拟器中使用一个,它工作正常。drawRect:被调用,并且该栏是完全透明的。@nanjunda我刚刚在导航栏中为自定义绘图实现了drawRect:并且在iOS 5中工作得非常好。没关系,除非文件上说不要这样做。苹果甚至告诉我们将UINavigationBar子类化以使用drawRect:而且在iOS 5中,swizzling不再起作用。为什么不告诉我们它不起作用?无论您是否绘制,您都必须实现drawRect:为了实现此功能,否则将UINavigationBar的背景色设置为“清除”会产生黑色或半透明灰色条,具体取决于是否已设置为“半透明”。这样的应用程序是否会被拒绝,或者是否足够接近苹果的要求?