如何将附加的阴影添加到uinavigationbar和uitoolbar

时间:2011-04-08 13:37:18

标签: iphone uinavigationbar uitoolbar shadow dropshadow

我正在开发一个使用UINavigationBar和UIToolbar自定义图像的应用程序,这很好,但是它们还需要在导航栏下方和工具栏上方的阴影,它总是位于所有其他视图控制器之上。我不能简单地制作包含阴影的背景图像,因为这对我的tableviews不起作用。当我将导航栏和工具栏设置为隐藏(动画)时,我还需要阴影动画。

我已经浏览了网络上的Stack Overflow和其他资源,并且已经完成了所提出的解决方案,但我无法成功地将UINavigationBar,UIToolbar甚至UINavigationController子类化,以提供我所追求的结果。

感谢任何可以提供的帮助。谢谢:))

3 个答案:

答案 0 :(得分:2)

最后,我决定只使用带阴影的背景png图像,并将它们应用于UINavigationBar和UIToolbar的子类,它们实现了drawRect方法(用于背景图像),sizeThatFits方法用于调整导航栏的大小。这是最终产品(按钮隐藏栏):

以下是我在每个子类中实现的方法:

 - (void)drawRect:(CGRect)rect {
   UIImage *image = [[UIImage imageNamed:@"bargloss-withshadow.png"] retain];
   [image drawInRect:rect];
   [image release];
}


- (CGSize)sizeThatFits:(CGSize)size {
    CGSize newSize = CGSizeMake(320,60);
    return newSize;
}

请注意,我还在IB中制作了黑色半透明条形图,以便内容流入它们。

答案 1 :(得分:1)

假设您没有对视图层次结构做任何过于花哨的事情,那么可以相对容易地完成。在您的应用程序中添加以下代码行:didFinishLaunchingWithOptions方法。

dispatch_async(dispatch_get_main_queue(), ^{
    UIWindow* mainWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:0];
    UIView* mainView = [[mainWindow subviews] objectAtIndex:0];
    UIImageView* shadowImageView = [[UIImageView alloc] initWithImage:kImgNavbarShadowResizeable];
    shadowImageView.frame = CGRectMake(0, 64, 320, shadowImageView.frame.size.width);
    [mainView insertSubview:shadowImageView atIndex:1];
});

shadowImageView是您要用作阴影的imageView。

答案 2 :(得分:0)

查看Matt Gallagher的blog post。它涵盖了(您的一部分)您想要做的事情。除此之外,您可以尝试在导航控制器上方添加“阴影视图”,您可以根据需要设置动画。