如果您想要一个按钮(您可能确实想要),您可以通过继承UINavigationBar 来完全实现它。你应该记住UINavigationBar 中的height 是只读属性。
样式但不可点击:
假设我们将导航栏子类化并在那里添加按钮。你可以这样做,它会看起来很棒。例如:
- (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。
- 为这个“UIButton”设置任何你想要的样式(如果你想要的话
- 将操作固定到“UIButton”:
[btn addTarget:self action:@selector(menuShow:) forControlEvents:UIControlEventTouchUpInside];
-
menuShow: 方法应该在你的 category 中声明
- 您可以在每次想要重绘视图控制器时调用绘图按钮。
如您所见,会有两个单独的视图:UINavigationBar 和 UIButton。这允许您在这个小按钮下设置内容并使其可点击。
那么为什么不隐藏导航栏,而使用不同的视图呢?因为 iOS7 ;) 例如,当 Apple 在 iOS7 中更改它时,您必须重建您的伪 NavigationBar,只有额外的视图,您不需要做任何事情。