我想开发具有自定义导航栏的应用,如下图所示:
我认为我需要子类UINavigationBar并添加按钮到导航栏的中心,但我真的不知道如何使导航栏看起来像在图像上。能否请你给我建议我应该做什么,链接到任何类型的文件都会很棒!
关于navBar的类似问题对我没有帮助:
编辑:
我的想法是下一步:使自定义导航栏高度略大于默认大小,并添加带箭头的背景图像,边缘有一些透明度。
答案 0 :(得分:6)
如果你想要一个按钮(你可能想要),你可以通过继承UINavigationBar
来完全实现它。您应该记住,height
UINavigationBar
是只读属性。
风格但不可点击:
所以我们假设我们将导航栏子类化并在那里添加按钮。你可以做到这一点,看起来会很棒。例如:
- (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];
}
但是您将面临UINvaigationBar
下方按钮不可录制的问题。 (我在答案的底部张贴了一张图片)
所以显然没有你想要遵循的路径。甚至不尝试。
风格但不可点击2:
您可以在导航栏子类中重写此方法
- (CGSize) sizeThatFits:(CGSize)size {
return CGSizeMake(custom_width, custom_height);
}
然后使用UIBezierPath
屏蔽它,例如
正确(可点击)方式:
您必须为UINavigationBar
创建视图。我将在这里做什么(如果你想要每个屏幕):
UIViewController
类别(例如 - 这是最简单的方式)UIButton
。[btn addTarget:self action:@selector(menuShow:) forControlEvents:UIControlEventTouchUpInside];
menuShow:
方法应在类别 正如您所看到的那样,会有两个分隔视图:UINavigationBar
和UIButton
。这允许您在此小按钮下设置内容并使其可点击。
那么为什么只是不隐藏导航栏,并使用不同的视图?因为iOS7;)当Apple在iOS7中更改它时,你必须重建你的伪NavigationBar,只需要额外的视图,你不需要做任何事情。
答案 1 :(得分:2)
您不需要继承UINavigationBar。创建UIView添加到它UIImageView作为背景与您需要的形状的图像,添加按钮。
子类UINavigationController隐藏UINavigationBar,添加自定义导航栏。
答案 2 :(得分:2)
首先使用 -
隐藏导航栏self.navigationController.navigationBarHidden = YES;
然后创建具有所需高度的UIView,navigationBar的高度为44px。然后创建背景图像视图,所需UIButton的对象,并将创建的UIView上的所有对象添加为子视图。它看起来像navigationBar.Thank you。
答案 3 :(得分:1)
您可以在导航栏上将自定义形状视图添加为titleView。 只需确保clipsToBounds设置为NO,因此不会被剪裁。