【问题标题】:Custom UINavigationBar height: how do I adjust the content views?自定义 UINavigationBar 高度:如何调整内容视图?
【发布时间】:2012-09-14 12:35:19
【问题描述】:

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

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

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

我找不到更改UINavigationController's navigation view 大小和位置的方法。

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

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

非常感谢!

【问题讨论】:

    标签: ios cocoa-touch ios5


    【解决方案1】:

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

    我发布了一个类似的问题,但除了您的问题之外还有另一个问题。我被指向a question on how to set the height of a UINavigationBar,而最佳答案对我来说非常有效。用户建议创建自定义 UINavigationBar 类别并覆盖 -sizeThatFits 方法。它解决了您的应用无法识别 UINavigationBar 增加的高度的问题,以及 UINavigationBar 中的视图在默认 44px 底线下方不可点击的额外问题。

    【讨论】:

    • 感谢您的回复!我们最终做的事情是确保我们所有的 xib 的起源都从 15 而不是 0 开始,这似乎已经经受住了时间的考验,尽管它在任何方面都不是优雅的。很高兴有一个不那么痛苦的方法,我们必须试一试!
    猜你喜欢
    • 2017-04-18
    • 2014-10-16
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2018-12-21
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多