如何将附加的阴影添加到 uinavigationbar 和 uitoolbar
Posted
技术标签:
【中文标题】如何将附加的阴影添加到 uinavigationbar 和 uitoolbar【英文标题】:how can I add attached drop shadows to uinavigationbar and uitoolbar 【发布时间】:2011-04-08 13:37:17 【问题描述】:我正在开发一个为 UINavigationBar 和 UIToolbar 使用自定义图像的应用程序,这很好,但它们还需要在导航栏下方和工具栏上方放置一个阴影,该阴影始终位于所有其他视图控制器之上。我不能简单地制作包含阴影的背景图像,因为这不适用于我的表格视图。当我将导航栏和工具栏设置为隐藏(动画)时,我还需要动画消失。
我查看了 Stack Overflow 和网络上的其他资源,并研究了建议的解决方案,但我无法成功地将 UINavigationBar、UIToolbar 甚至 UINavigationController 子类化以提供我所追求的结果。
如果能提供任何帮助,我们将不胜感激。谢谢:)
【问题讨论】:
【参考方案1】:最后我决定只使用带有阴影的背景 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 中将条形设为黑色半透明,以便内容在它们下方流动。
【讨论】:
【参考方案2】:假设您没有对视图层次结构做任何太花哨的事情,它可以相对容易地完成。在您的应用程序中添加以下代码行: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。
【讨论】:
【参考方案3】:查看 Matt Gallagher 的 blog post。它涵盖了(部分)您想要做的事情。除此之外,您可以尝试在导航控制器上方添加一个“阴影视图”,您可以根据需要制作动画。
【讨论】:
我看过 matt 的帖子并尝试过使用它,但是 UINavigationBar 和 UIToolbar 的 layoutsubviews 方法不允许我将图层放置在视图边界之外。我修改了该示例以将图层添加到可以处理的超级视图(在发布此问题之前这样做),但没有附加阴影等隐藏动画,阴影只是漂浮在内容上。以上是关于如何将附加的阴影添加到 uinavigationbar 和 uitoolbar的主要内容,如果未能解决你的问题,请参考以下文章
如何将文本阴影添加到 Twitter Bootstrap 导航栏链接?
将 vline 添加到 geom_density 和平均 R 的阴影置信区间