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
。 我会在这里做什么(如果你想要它在每个屏幕)是:
- 做一个
UIViewController
的类别,可以绘制(例如 – 这是最简单的方法)UIButton
。 - 不pipe你想要什么样的“UIButton”风格(如果你想的话)
- Pin action to'UIButton':
[btn addTarget:self action:@selector(menuShow:) forControlEvents:UIControlEventTouchUpInside];
-
menuShow:
方法应该在你的类中声明 - 您可以每次要重绘视图控制器时调用绘图button。
正如你可以看到那里将有两个分离查看: UINavigationBar
和UIButton
。 这是允许你在这个小button下面设置内容,并使其可打字。
那么为什么不隐藏导航栏,并使用不同的观点? 因为iOS7;)当Apple在iOS7中更改它时,例如,您必须重新生成伪导航栏,只有其他视图,您不需要执行任何操作。
你不需要inheritanceUINavigationBar。 创buildUIView添加到它的UIImageView作为背景图像在你需要的形状,添加button。
UINavigationController子类隐藏UINavigationBar,添加自定义导航栏。
首先隐藏导航栏使用 –
self.navigationController.navigationBarHidden = YES;
然后创buildUIView所需的高度,导航栏的高度为44px。然后创build背景图像视图,所需的UIButton对象,并添加所有对象创build的UIView作为子视图。它将看起来像导航条。谢谢。
您可以在导航栏上将自定义形状视图添加为titleView。 只要确保clipsToBounds设置为NO,所以它不会被剪辑。