我如何在UINavigationBar的底部画一条线?

时间:2009-04-15 18:49:00

标签: iphone cocoa-touch

我正在为我正在处理的iPhone应用程序提供的设计要求在导航栏底部显示1px红线。我知道如何用Quartz和-drawRect绘制一条线,但是如何访问UINavigationBar的视图呢?或者它可以在应用程序的主视图中绘制线条,还有其他所有内容?

Duncan Wilcox下面的答案可以得到画线,但是栏上的按钮无法按下。

如果我[self.navigationItem.titleView.superview sendSubviewToBack:titleView],那么在nib文件中创建的按钮可以工作,但不能动态添加。

2 个答案:

答案 0 :(得分:1)

我猜答案取决于您想要红线的位置,作为导航栏的一部分或在其下方。这只有1个像素差异,但设计师现在要求:)

如果你想要它在导航栏下面,你必须把它放在需要该行的所有应用程序的视图中。

有一个非常简单的方法来改变导航栏的外观,我用它来为整个导航栏外观设置外观,但如果你使图像部分透明,它甚至可能只适用于导航栏的某些部分。

基本上我们想要为导航层次结构中UINavigationItem的{​​{1}}设置外观。

  • 创建包含自定义导航栏外观的320x44图像
  • UIViewController添加到UIImageView
  • 所在的XIB
  • UINavigationItem的{​​{1}}媒体资源与titleView
  • 相关联

这几乎可行,但标题视图将以奇怪的方式调整大小。为了解决这个问题,我有一个UINavigationItem子类,可以正确设置图像:

UIImageView

因此,不要使用上面的UIImageView,而是使用此@implementation TitleViewHack - (void)setFrame:(CGRect)frame { frame.size.width = 320; if(frame.origin.x > 0 && frame.origin.x < 20) frame.origin.x = 0; [super setFrame:frame]; } @end 类。

答案 1 :(得分:0)

这是我已经解决的问题:

// UINavigationBar subclass
- (void)drawRect:(CGRect)rect {
    UIImage *image = [UIImage imageNamed: @"background_navbar.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}