1

我想实现与 iPad 上的照片应用程序完全相同的效果:图库控制器期间的纯黑色导航栏,然后在查看照片时透明。

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

如果有人可以分享这是如何完成的,我将不胜感激。谢谢。

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

2 回答 2

1

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

如果您要显示照片,则首先隐藏您的导航栏:

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

现在将导航栏的样式设置为UIBarStyleBlackTranslucent

[self.navigationController.navigationBar setBarStyle:UIBarStyleBlackTranslucent];

然后显示您的图像视图(或带有图片的滚动视图 - 取决于您的逻辑)。然后点击您的图像视图,您可以显示和隐藏栏)

 // 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。

于 2012-11-29T15:31:17.273 回答
1

似乎您想在画廊中显示导航栏,因此无需更改任何内容,但选择照片后,将导航栏隐藏在 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。

于 2012-11-29T17:18:08.973 回答