Iphone 自定义UINavigationBar高度问题

Iphone 自定义UINavigationBar高度问题,iphone,ios,objective-c,height,uinavigationbar,Iphone,Ios,Objective C,Height,Uinavigationbar,因此,我正在构建一个iOS应用程序,并定制了比默认大小更高的UINavigationBar。然而,出现了几个问题 “我的内容”的作用就像UINavigationBar具有默认高度一样。这将导致y=0处的任何视图实际上被我的UINavigationBar隐藏或部分隐藏。我必须手动将视图向下偏移,这不是一个非常大的问题,但我很好奇是否有人找到了解决这个问题的方法。从本质上说,我的UINavigationBar被视为具有较大背景图像的普通工具栏 如果正在点击的部分低于正常UINavigationBar

因此,我正在构建一个iOS应用程序,并定制了比默认大小更高的UINavigationBar。然而,出现了几个问题

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

如果正在点击的部分低于正常UINavigationBar的典型44px底部,则my 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)];
- (void)layoutSubviews {
    [super layoutSubviews];
    CGRect barFrame = self.frame;
    barFrame.size.height = heightYouWant;
    self.frame = barFrame;
}
在使用根视图控制器分配和初始化UINavigationController之后,这将在主窗口的-makeKeyAndVisible中执行。对于@2x版本,背景图像宽320px,高72px

正如您所看到的,我试图在这里设置UINavigationBar的高度,在这部分代码之后,它似乎没有粘住。它恢复为44px


我尝试了UINavigationBar子类,但没有成功。非常感谢您的帮助。

尝试将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];
}

将此方法添加到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)];
- (void)layoutSubviews {
    [super layoutSubviews];
    CGRect barFrame = self.frame;
    barFrame.size.height = heightYouWant;
    self.frame = barFrame;
}

听起来很复杂。虽然你可能想考虑为什么要改变高度,因为坚持用户熟悉的UI通常是最好的。有帮助的帖子:@彼得特在第二个链接中的最高答案非常棒!它解决了我的两个问题。谢谢不幸的是,这对我不起作用。它会更改背景图像,但对UINavigationBar的高度或根ViewController的位置都没有影响。这会更改UINavigationBar的高度,以便现在正确显示背景图像。但是,它似乎也不会影响视图相对于UINavigationBar的行为。我需要手动将视图的y原点设置为UINavigationBar高于默认44px的值,以使其看起来是y=0。