将UINavigationBar的外观从实体更改为透明

时间:2012-11-29 14:29:28

标签: objective-c uinavigationcontroller uinavigationbar

我希望获得与iPad上的照片应用程序完全相同的效果:在图库控制器中使用纯黑色导航栏,然后在查看照片时透明。

在AppDelegate中初始化导航控制器后,我可以使用下面的代码更改样式,但不能在AppDelegate之外。但是,一旦导航控制器在屏幕上并设置一次,navigationBar就会变为只读属性。

如果有人能分享如何做到这一点,我将不胜感激。感谢。

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

2 个答案:

答案 0 :(得分:1)

UIBarStyleBlackTranslucent barStyle中的UINavigationBar并不像通常在其他样式中那样修复它的位置。在UIBarStyleBlackTranslucent样式中,它只会在您的视图上重叠,并且视图内容会被翻译,view高度也会增加。

如果您要显示照片,请先隐藏您的navigationBar:

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

现在将navBar的样式设置为UIBarStyleBlackTranslucent

[self.navigationController.navigationBar setBarStyle:UIBarStyleBlackTranslucent];

然后显示您的imageview(或带有图片的scrollview-取决于您的逻辑)。然后在点击您的imageview时,您可以显示并隐藏栏)

 // Show/Hide bar
 // Let say you've a bool 'shown' for current status of navbar's visibility.
if (!shown) {
    [[self navigationController] setNavigationBarHidden:YES animated:YES];
}else{
     [[self navigationController] setNavigationBarHidden:NO animated:YES];
}
shown = !shown;

希望这样做。退出画廊后,永远不会忘记将barStyle重新发送到UIBarStyleBlackOpaque。

答案 1 :(得分:1)

好像你想在Gallery中显示navigationBar所以除了选择照片之后无需更改任何内容,请将NavigationBar隐藏在PhotoViewController中。

-(void) viewDidLoad
 {
  self.navigationController.navigationBar.barStyle=UIBarStyleBlackTranslucent;
  self.navigationController.navigationBar.hidden = NO;
 }

和ViewWillAppear

-(void) viewWillAppear 
 {
  self.navigationController.navigationBar.hidden = YES;
 }

然后创建一个实现UITapGestureRecognizer的自定义方法,在单击时通过将hidden属性设置为YES来显示navigationBar。