导航控制器透明栏样式不起作用

时间:2008-10-23 02:15:18

标签: iphone cocoa-touch

我正在使用导航控制器,我将样式设置为:

navController.navigationBar.barStyle = UIBarStyleBlackTranslucent;

但是当我运行我的程序时,导航控制器看起来像是在白色背景之上,而不是我的背景。当我向左或向右推动控制器时,我的所有视图(当前视图)都会移动到顶部,与导航栏的大小完全相同。在那里我可以通过导航控制器栏看到我的背景。有任何想法吗?当我的barStyle设置为不透明时,一切看起来都很好。我正在考虑将我的视图框设置为负'y'值,但我认为应该有更优雅的方式。

12 个答案:

答案 0 :(得分:10)

我相信UINavigationController假设您的控制器视图框架不包含导航栏下方的区域。

UIBarStyleBlackTranslucent更常用于UIToolbar,因此Apple可能无法轻松地将其与UINavigationB一起使用。如果你想在条形区域下可靠地渲染,你可能需要放弃UINavigationController,或者开始破解框架(小心旋转)。

另外,如果您打算在几秒钟后隐藏导航栏,那么如果您将其淡出(如照片应用),您将有一个更轻松的时间,而不是尝试向上滑动(如Mobile Safari)。相信我的那个......我花了很多时间来学习艰难的方法。

答案 1 :(得分:7)

只需使用透明背景图片,半透明= YES即可让内容在条形图下方流动。适用于iOS 5 / 6.添加到viewDidLoad。

self.navigationController.navigationBar.translucent = YES;
UIImage * backgroundImage = [UIImage imageNamed:@"spacer.gif"];
[self.navigationController.navigationBar setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:UIBarMetricsDefault];

我在这里附上了spacer.gif图片,单个1px x 1px透明图像。

spacer.gif

答案 2 :(得分:4)

self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.169 green:0.373 blue:0.192 alpha:0.9];
self.navigationController.navigationBar.translucent = YES;

注意:

  1. 请勿使用self.navigationBarStyleself.navigationBarTintColor进行更改。
  2. 将最后两个语句添加到viewDidLoad

答案 3 :(得分:3)

我遇到了同样的问题(在3.1.3中),虽然你已经设置了navigationBar后无法设置条形样式,但你可以随时设置tintColor和半透明值:

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

将创建'blackTranslucent'栏,当我将某些视图控制器推入堆栈时,我会更改navigationBar外观。

答案 4 :(得分:2)

我遇到了同样的问题,我通过使根视图的背景与我的视图相同来解决它。导航栏后面的白色区域原来是根视图。

答案 5 :(得分:1)

导航控制器会偏移其所有子视图的坐标系,以便在导航栏下方绘制。

将视图的框架扩展到负y域,以便在导航栏下绘制。

答案 6 :(得分:1)

您需要在info.plist文件中设置barstyle,以便正确地抵消所有内容。

但是,自从2.1 f / w发布以来,我还没有尝试过,但是当我在2.0中尝试这个时,我发现在从纵向旋转到横向之后设置丢失了。

答案 7 :(得分:1)

尝试使用它,可能会有所帮助。

_topToolBar.barStyle = UIBarStyleBlackTranslucent;
_topToolBar.alpha = 0.3;

答案 8 :(得分:1)

我遇到了同样的问题。我解决了!

ImageViewExtendController *detailImageController = [[ImageViewExtendController alloc] init];  
[detailImageController loadImage:url];
[self.navigationController pushViewController:detailImageController animated:YES];

答案 9 :(得分:0)

如果您在应用代理中将导航控制器的navigationBar设置为透明(在将导航控制器添加到窗口之前它对我有用),它会自动将您的视图移动到导航栏下方。

不幸的是,它也不会将您的视图转移到状态栏下方。很遗憾,您需要实现自己的UINavigationController版本。幸运的是,由于UINavigationBar可以重复使用,因此并不算太糟糕。

答案 10 :(得分:0)

试试这个:

self.tabBarController.tabBar.superview.backgroundColor = [UIColor blackColor];

答案 11 :(得分:0)

更改子视图控制器中的“扩展边缘”选项

例如,在xcode编辑器中,转到第一个viewcontroller子项并取消设置选项:

Extend Edges;
    Under Top Bars;
    Under Bottom Bars;
    Under Opaque Bars;

这样您的子ViewController将不会从导航控制器的状态栏下面开始布局,也不会在标签栏或工具栏中进行布局

希望它可以帮助任何人