3

我的应用程序有一个 59(虚拟)像素高的自定义导航栏,而不是标准 Apple UINavigationController UINavigationBar 的 44 像素。我在应用程序启动期间通过以下调用将样式应用于栏:

UIImage *navBarImage = [UIImage imageNamed:@"navigation-bar.png"];
[[UINavigationBar appearance] setBackgroundImage:navBarImage
                                   forBarMetrics:UIBarMetricsDefault];

这导致的问题是,它基本上是在标准导航栏原点的屏幕顶部拍打的图像。底层导航栏不知道它的大小发生了变化。这使得内容视图(推送到导航堆栈的视图)在自定义栏下方显示 15 个像素。

我找不到改变UINavigationController 导航视图大小和位置的方法。

解释这种定制的最优雅的方式是什么?以下(不优雅)的作品,但因为操作是在视图渲染后应用的,位置和调整大小的变化对用户来说非常明显并且看起来很业余:

- (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 的子类中。

非常感谢!

4

1 回答 1

5

我知道这很旧,但由于您从未得到答案,我想我可能会发布我如何解决这个问题。

我发布了一个类似的问题,但除了你的问题之外还有另一个问题。我被指出了一个关于如何设置 UINavigationBar 高度的问题,而最佳答案对我来说非常有效。用户建议创建自定义 UINavigationBar 类别并覆盖 -sizeThatFits 方法。它解决了您的应用程序无法识别 UINavigationBar 增加的高度的问题,以及 UINavigationBar 中的视图在默认 44px 底线下方不可点击的额外问题。

于 2013-02-09T10:30:00.417 回答