10

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

navController.navigationBar.barStyle = UIBarStyleBlackTranslucent;

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

4

12 回答 12

10

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

UIBarStyleBlackTranslucent 更常用于 UIToolbar,因此 Apple 可能没有让 UINavigationBar 很好地使用它。如果您想在栏区域下可靠地渲染,您可能需要放弃 UINavigationController,或者开始修改框架(小心旋转)。

此外,如果您的意图是在几秒钟后隐藏导航栏,如果您让它淡出(如照片应用程序)而不是尝试向上滑动(如 Mobile Safari) ,您将有更轻松的时间。相信我……这让我花了很多时间来艰难地学习。

于 2008-10-23T02:30:26.457 回答
7

只需使用透明背景图像,并且 translucent = 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 的透明图像。

间隔.gif

于 2012-12-11T10:30:10.447 回答
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.
于 2012-08-29T07:43:23.303 回答
3

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

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

将创建“blackTranslucent”栏,当我将某些视图控制器推入堆栈时,我会更改导航栏的外观。

于 2010-05-20T17:45:05.040 回答
2

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

于 2008-10-23T20:46:33.967 回答
1

导航控制器偏移了所有子视图的坐标系,因此它们在导航栏下方绘制。

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

于 2008-10-23T03:08:09.563 回答
1

您需要在 info.plist 文件中设置 barstyle 以正确偏移所有内容。

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

于 2008-10-28T18:15:42.500 回答
1

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

_topToolBar.barStyle = UIBarStyleBlackTranslucent;
_topToolBar.alpha = 0.3;
于 2010-10-20T15:44:15.770 回答
1

我有同样的问题。我解决了!

ImageViewExtendController *detailImageController = [[ImageViewExtendController alloc] init];  
[detailImageController loadImage:url];
[self.navigationController pushViewController:detailImageController animated:YES];
于 2010-11-09T10:14:44.853 回答
0

如果您在应用程序委托中足够早地将导航控制器的导航栏设置为透明(在将导航控制器添加到窗口之前它对我有用),它会自动将您的视图向上移动到导航栏下方。

不幸的是,它也不会改变您在状态栏下方的视图。可悲的是,您似乎需要实现自己的 UINavigationController 版本。幸运的是,它还不错,因为 UINavigationBar 非常可重用。

于 2008-10-23T16:08:04.997 回答
0

试试这个:

self.tabBarController.tabBar.superview.backgroundColor = [UIColor blackColor];
于 2010-11-18T09:01:25.987 回答
0

更改子 viewControllers 中的 Extend Edges 选项

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

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

这样,您的子 ViewController 将不会从导航控制器的状态栏下方开始布局,无论是标签栏还是工具栏

希望它可以帮助任何人

于 2014-05-08T17:35:58.263 回答