1

对于具有“独特”设计的 iphone 项目(我对此一点都不满意),我需要绘制一个自定义视图,该视图与 UINavigationController 中控制器的导航栏部分重叠。目标是具有固定设备方向(纵向)的 iphone/ios 6。

我目前的解决方案是通过我的控制器以编程方式禁用导航栏self.navigationController.navigationBar.hidden = YES;viewDidLoad并绘制一个“假”导航栏并在其上绘制。这导致状态栏颜色保持黑色的问题(因为没有可见的真正导航栏)。这里讨论iOS 6 状态栏颜色:iOS 6 中的状态栏颜色?

我已经尝试使用[self.view insertSubview:OVERLAPVIEW aboveSubView:self.navigationController.navigationBar]但它不起作用,并且在导航栏下方绘制了 OVERLAPVIEW。

是否有另一种方法可以将导航栏与另一个视图(z 方向)重叠?或者有没有办法在没有显示导航栏时更改状态栏颜色(不幸的是,除此之外,重叠的视图是应用程序的主视图和用户可见的第一个屏幕)

全面披露:我是一个 ios 菜鸟和堆栈溢出潜伏者 - 这是我关于堆栈溢出的第一个问题,请帮助我澄清我的问题并在必要时提高我的堆栈溢出技能。

4

3 回答 3

5

采用

[self.navigationController.view addSubview:OVERLAPVIEW];

代替

[self.view insertSubview:OVERLAPVIEW aboveSubView:self.navigationController.navigationBar];

您可以根据使导航栏部分可见来调整视图的框架。

于 2013-01-02T04:14:34.857 回答
1

我通过隐藏导航栏解​​决了这个问题

self.navigationController.navigationBar.hidden = YES;

并通过在我的视图中添加导航栏。在这个新导航栏之后添加的所有内容都将与其重叠(您也可以使用 index [parentView.subviews objectAtIndex:0]; )。状态栏的颜色会根据需要更改。

在启动画面的情况下,我完全一样,并将导航栏与全屏启动图像重叠。

-(void)viewDidLoad{
    [super viewDidLoad];
    UINavigationBar * navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 49)];
    UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"SPLASH"];
    [navigationBar pushNavigationItem:item animated:NO];
    [self.view addSubview:navigationBar];

    CGRect frame = [[UIScreen mainScreen] bounds];
    frame.origin.y -= 20;
    UIImageView *splashImage = [[UIImageView alloc] initWithFrame:frame];
    splashImage.image = [UIImage imageNamed:@"splash"];
   [self.view addSubview:splashImage];
}
于 2013-03-10T16:00:38.163 回答
0

似乎这个答案解决了我的问题 在所有其他视图之上添加 UIView,包括状态栏

注意:目前我不会走这条路,一旦我尝试过我会接受这个答案(我暂时推迟解决这个问题,可能需要一段时间)

于 2013-01-04T09:57:47.020 回答