我正在为我正在处理的iPhone应用程序提供的设计要求在导航栏底部显示1px红线。我知道如何用Quartz和-drawRect绘制一条线,但是如何访问UINavigationBar的视图呢?或者它可以在应用程序的主视图中绘制线条,还有其他所有内容?
Duncan Wilcox下面的答案可以得到画线,但是栏上的按钮无法按下。
如果我[self.navigationItem.titleView.superview sendSubviewToBack:titleView],那么在nib文件中创建的按钮可以工作,但不能动态添加。
答案 0 :(得分:1)
我猜答案取决于您想要红线的位置,作为导航栏的一部分或在其下方。这只有1个像素差异,但设计师现在要求:)
如果你想要它在导航栏下面,你必须把它放在需要该行的所有应用程序的视图中。
有一个非常简单的方法来改变导航栏的外观,我用它来为整个导航栏外观设置外观,但如果你使图像部分透明,它甚至可能只适用于导航栏的某些部分。
基本上我们想要为导航层次结构中UINavigationItem
的{{1}}设置外观。
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)];
}