iOS自定义形状导航栏

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

在这里输入图像说明

在这里输入图像说明

我认为我需要inheritanceUINavigationBar并将button添加到导航栏的中心,但我不知道如何使导航栏看起来像在图像上。 你可以请给我build议,我应该怎么做,任何types的文件的链接将是真棒!

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

  • ios后退button在酒吧
  • 在iOS中使用自定义导航栏
  • iOS 5中的自定义导航栏
  • rogcar

编辑:

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

如果你想要一个button(你可能需要),你可以通过UINavigationBar完全实现它。 你应该记住UINavigationBar height是只读属性。

风格但不可打结:

那么让我们假设我们inheritance导航栏并在那里添加button。 你可以做到这一点,它会看起来不错。 例如:

 - (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]; } 

但是您将面临一个问题,即您的button在UINvaigationBar下面UINvaigationBar 。 (我在答案的底部张贴图片)

所以显然没有你想要遵循的path。 甚至不要尝试。

风格但不可打2:

您可以在导航栏子类中重写此方法

 - (CGSize) sizeThatFits:(CGSize)size { return CGSizeMake(custom_width, custom_height); } 

然后使用UIBezierPath来掩盖它

正确(可点击)的方式:

你必须创build一个视图棒到你的UINavigationBar 。 我会在这里做什么(如果你想要它在每个屏幕)是:

  1. 做一个UIViewController的类别,可以绘制(例如 – 这是最简单的方法) UIButton
  2. 不pipe你想要什么样的“UIButton”风格(如果你想的话)
  3. Pin action to'UIButton': [btn addTarget:self action:@selector(menuShow:) forControlEvents:UIControlEventTouchUpInside];
  4. menuShow:方法应该在你的类中声明
  5. 您可以每次要重绘视图控制器时调用绘图button。

正如你可以看到那里将有两个分离查看: UINavigationBarUIButton 。 这是允许你在这个小button下面设置内容,并使其可打字。

那么为什么不隐藏导航栏,并使用不同的观点? 因为iOS7;)当Apple在iOS7中更改它时,例如,您必须重新生成伪导航栏,只有其他视图,您不需要执行任何操作。

在这里输入图像说明

你不需要inheritanceUINavigationBar。 创buildUIView添加到它的UIImageView作为背景图像在你需要的形状,添加button。

UINavigationController子类隐藏UINavigationBar,添加自定义导航栏。

首先隐藏导航栏使用 –

 self.navigationController.navigationBarHidden = YES; 

然后创buildUIView所需的高度,导航栏的高度为44px。然后创build背景图像视图,所需的UIButton对象,并添加所有对象创build的UIView作为子视图。它将看起来像导航条。谢谢。

您可以在导航栏上将自定义形状视图添加为titleView。 只要确保clipsToBounds设置为NO,所以它不会被剪辑。