iOS自定义形状导航栏

ign*_*rum 3 iphone xcode objective-c ios

我想用自定义导航栏开发应用程序,如下图所示:

在此输入图像描述

在此输入图像描述

我认为我需要子类UINavigationBar并添加按钮到导航栏的中心,但我真的不知道如何使导航栏看起来像在图像上.能否请你给我建议我应该做什么,任何类型的文件链接都很棒!

关于navBar的类似问题对我没有帮助:

编辑:

我的想法是下一步:使自定义导航栏高度略大于默认大小,并添加带箭头的背景图像,边缘有一些透明度.

Jak*_*kub 6

如果你想要一个按钮(你可能想要),你可以通过子类化完全实现它UINavigationBar.你应该记住,heightUINavigationBar只读属性.

风格但不可点击:

所以我们假设我们将导航栏子类化并在那里添加按钮.你可以做到这一点,看起来会很棒.例如:

- (void)drawRect:(CGRect)rect
{
    self.backgroundColor = [UIColor lightGrayColor];
    UIButton *myButton = [[UIButton alloc] initWithFrame:CGRectMake(self.frame.size.width/2-50, 0 , 100, 100)];
    [myButton setBackgroundColor:[UIColor lightGrayColor]];
    [myButton setTitle:@"Normal" forState:UIControlStateNormal];
    [myButton setTitle:@"Highlighted" forState:UIControlStateHighlighted];
    [self addSubview:myButton];
    [self sendSubviewToBack:myButton];
}
Run Code Online (Sandbox Code Playgroud)

但是你将面临一个问题,即你的按钮在下面是不可录制的UINvaigationBar.(我在答案的底部张贴了一张图片)

所以显然没有你想要遵循的路径.甚至不尝试.

风格但不适合2:

您可以在导航栏子类中覆盖此方法

- (CGSize) sizeThatFits:(CGSize)size  {
  return CGSizeMake(custom_width, custom_height);
}
Run Code Online (Sandbox Code Playgroud)

然后使用UIBezierPath例如掩码它

正确(可点击)方式:

你必须创建一个视图棒UINavigationBar.我将在这里做什么(如果你想在每个屏幕上)是:

  1. 制作一个UIViewController可以绘制的类别(例如 - 这是最简单的方法)UIButton.
  2. 无论你想要什么样的风格'UIButton'(如果你想要的话)
  3. 确定'UIButton'的动作: [btn addTarget:self action:@selector(menuShow:) forControlEvents:UIControlEventTouchUpInside];
  4. menuShow:方法应在您的类别中声明
  5. 每次要重绘视图控制器时,都可以调用绘图按钮.

正如你所看到的那样,会有两个独立的视图:UINavigationBarUIButton.这允许您在此小按钮下设置内容并使其可点击.

那么为什么只是不隐藏导航栏,并使用不同的视图?因为iOS7;)当Apple在iOS7中更改它时,你必须重建你的伪NavigationBar,只有额外的视图,你不需要做任何事情.

在此输入图像描述