如何在iOS7中用CustomHeader替换UINavigationBar

时间:2013-09-30 04:44:16

标签: iphone objective-c uinavigationbar ios7

我想使用自定义标头而不是默认UINavigationBar。我能够做得很好,直到我遇到一个条件来保持与iOS6的向后兼容性。我有上一个问题here没有回答。

最近对于Facebook App,我可以在iOS7中看到,蓝色标题栏很好地对齐。对我而言,它看起来像是一个自定义标题,我不确定。 FaceBook-Header

现在的问题是,我坚持使用我的自定义应用程序标头的实现。我的自定义标题高度为48px,位于顶部和“顶部”的“网络状态栏”之后。我只得到大约35像素,因为其余的都在“网络状态栏”like this.

之后

这是我实现的目标。

  • 我想要一个自定义标题。 - 完成
  • 我不想使用UINavigationBar。 - 完成
  • 我想支持iOS 5.0直到7.0 - Stuck

以下是我使用Custom header

时的样子

以下是UINavigationBar

的内容

如何使用“自定义标题”使应用标题显示为“FaceBook标题”而不会出现在“顶部网络标题栏”下方。如果我增加状态栏的高度,它在iOS6&中会显得很奇怪。较旧,但在iOS7中非常适合。我想选择正确的方法。

非常感谢任何专家帮助。

2 个答案:

答案 0 :(得分:2)

您需要将UIToolbar放在xib中,

并在工具栏中添加背景图片,

 self.navigationController.navigationBarHidden = YES;

[self.toolBar setBackgroundImage:[UIImage imageNamed:@"background.png"] forToolbarPosition:UIToolbarPositionAny barMetrics: UIBarMetricsDefault];

添加栏按钮,

UIButton *facebookButton =  [UIButton buttonWithType:UIButtonTypeCustom];
[facebookButton setImage:[UIImage imageNamed:@"facbookBarImage.png"] forState:UIControlStateNormal];
[facebookButton addTarget:self action:@selector(action:)forControlEvents:UIControlEventTouchUpInside];
[facebookButton setFrame:CGRectMake(0, 0, 53, 31)];
UIBarButtonItem *facebookBarButton = [[UIBarButtonItem alloc] initWithCustomView: facebookButton];

self.toolBar.items = [NSArray arrayWithObjects: facebookBarButton,nil];

答案 1 :(得分:0)

经过一些兼容性研究后,我遇到了一个有效的解决方案,即制作一个没有UINavigationBar&的自定义标题。实现我想要的。随意使用这种方法。

以下是我的结果:iOS7Older iOS

方法是找出edgesForExtendedLayout(在iOS 7中可用)。如果我们在iOS7上然后决定“自定义标题”的高度(可能比我们在旧版本中保留的高10个像素,以便在“最高网络状态栏”下填充额外的10P像素。)

  • 找出edgesForExtendedLayout的iOS7兼容性

    CGFloat y;
    if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) {
        self.edgesForExtendedLayout = UIRectEdgeNone;
        y= 58;
    }else {
        y = 48;
    }
    
  • 制作高度为y的自定义标题

    self.customHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, appDimensions.width, y)];
    
  • 此处customHeaderView上的自定义按钮

    self.sideMenuButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [self.sideMenuButton setFrame:CGRectMake(0, y-45, 45, 45)];
    

所以现在,如果我在iOS7上运行它,我看到我的标题有足够的高度48pixel(超过我们在触摸区的人机界面指南(44 x 44)中所拥有的那个),即使是10个像素位于“顶级网络”之下状态栏)。

如果我在iOS中运行它< iOS7,我将自定义标题为48 Pixel,从“顶级网络状态栏”

开始

希望这有助于其他人。