1

所以我正在构建一个 iOS 应用程序,并将我的 UINavigationBar 自定义为高于默认大小。然而,出现了几个问题。

  1. 我的内容就像 UINavigationBar 是默认高度一样。这导致 y=0 处的任何视图实际上被我更高的 UINavigationBar 隐藏或部分隐藏。我必须手动将视图向下放置正确的偏移量,这不是一个非常大的问题,但我很好奇是否有人找到了解决此问题的方法。本质上,我的 UINavigationBar 被视为具有较大背景图像的普通 UINavigationBar。

  2. 如果被点击的部分低于普通 UINavigationBar 的典型 44px 底部,则我的 UINavigationBar 中的任何视图/按钮都不可点击。正常范围内的任何东西都可以正常工作,但低于 44px 标记它不会注册。再次,就好像我的 UINavigationBar 被应用程序视为具有正常高度但背景图像很大的一个。这是一个我真正需要解决的更关键的问题。

这是修改我的 UINavigationBar 的代码:

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navBarBackground_iPhone.png"] forBarMetrics:UIBarMetricsDefault];
[self.navController.navigationBar setBackgroundColor:[UIColor whiteColor]];
[self.navController.navigationBar setFrame:CGRectMake(0, 0, self.frame.size.width, 72)];

这是在我的-makeKeyAndVisibleUINavigationController 被分配并使用根视图控制器初始化后在我的主窗口中执行的。背景图像宽 320 像素,高 72 像素(@2x 版本的两倍)。

如您所见,我尝试在此处设置 UINavigationBar 的高度,在这部分代码之后它似乎没有粘住。它恢复为 44 像素。

我尝试将 UINavigationBar 子类化,但没有成功。任何帮助是极大的赞赏。

4

2 回答 2

0

尝试继承 UINavigationBar 并覆盖以下方法:

 - (void)drawRect:(CGRect)rect
 {
    int heightYouWant = 100;

    UIImage *image = [UIImage imageNamed:@"title_bar_bg.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, heightYouWant)];

    self.tintColor = [UIColor colorWithRed:1/255.0 green:62/255.0 blue:130/255.0 alpha:1];
}
于 2013-02-08T17:12:56.057 回答
0

将此方法添加到 UINavigationBar 的子类中:

- (void)layoutSubviews {
    [super layoutSubviews];
    CGRect barFrame = self.frame;
    barFrame.size.height = heightYouWant;
    self.frame = barFrame;
}
于 2013-02-09T20:03:02.990 回答