我正在开发一个使用UINavigationBar和UIToolbar自定义图像的应用程序,这很好,但是它们还需要在导航栏下方和工具栏上方的阴影,它总是位于所有其他视图控制器之上。我不能简单地制作包含阴影的背景图像,因为这对我的tableviews不起作用。当我将导航栏和工具栏设置为隐藏(动画)时,我还需要阴影动画。
我已经浏览了网络上的Stack Overflow和其他资源,并且已经完成了所提出的解决方案,但我无法成功地将UINavigationBar,UIToolbar甚至UINavigationController子类化,以提供我所追求的结果。
感谢任何可以提供的帮助。谢谢:))
答案 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。它涵盖了(您的一部分)您想要做的事情。除此之外,您可以尝试在导航控制器上方添加“阴影视图”,您可以根据需要设置动画。