Ios 自定义UINavigationBar高度:如何调整内容视图?

Ios 自定义UINavigationBar高度:如何调整内容视图?,ios,cocoa-touch,ios5,Ios,Cocoa Touch,Ios5,我的应用程序有一个59(虚拟)像素高的自定义导航栏,而标准的苹果UINavigationController UINavigationBar只有44像素。在应用程序启动过程中,我通过以下调用将样式应用到酒吧: UIImage *navBarImage = [UIImage imageNamed:@"navigation-bar.png"]; [[UINavigationBar appearance] setBackgroundImage:navBarImage

我的应用程序有一个59(虚拟)像素高的自定义导航栏,而标准的苹果UINavigationController UINavigationBar只有44像素。在应用程序启动过程中,我通过以下调用将样式应用到酒吧:

UIImage *navBarImage = [UIImage imageNamed:@"navigation-bar.png"];
[[UINavigationBar appearance] setBackgroundImage:navBarImage
                                   forBarMetrics:UIBarMetricsDefault];
这导致的问题是,它基本上是一个在标准导航栏原点的屏幕顶部拍打的图像。底层导航栏不知道其大小已更改。这使得内容视图(推到导航堆栈上的视图)在自定义栏下显示15个像素

我找不到一种方法来改变这个系统的大小和位置

对于这种定制,最优雅的方式是什么?以下操作(不是很优雅)可行,但由于操作是在渲染视图后应用的,因此用户可以非常清楚地看到位置的移动和大小调整,并且看起来非常业余:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    CGRect frame = self.view.frame;
    self.view.frame = CGRectMake(frame.origin.x, frame.origin.y + 15, frame.size.width, frame.size.height - 15);
}
推送到导航堆栈上的所有控制器都位于实现上述方法的UIViewController的子类中


非常感谢

我知道这很古老,但既然你一直没有得到答案,我想我可以发布我是如何解决这个问题的


我发布了一个类似的问题,但除了你的问题外,还有另一个问题。有人指了指我,上面的答案对我来说非常有效。用户建议创建自定义UINavigationBar类别并重写-sizeThatFits方法。它解决了应用程序无法识别UINavigationBar高度增加的问题,以及UINavigationBar中的视图无法在默认的44px底线下单击的问题。

感谢您的回复!我们最终要做的是确保所有的XIB都从15开始,而不是从0开始,这似乎经受住了时间的考验,尽管它在任何方面都不优雅。很高兴有一个不那么痛苦的方法,我们必须试一试!