2

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

我查看了 Stack Overflow 和网络上的其他资源,并研究了建议的解决方案,但我无法成功地将 UINavigationBar、UIToolbar 甚至 UINavigationController 子类化以提供我所追求的结果。

将不胜感激可以提供的任何帮助。谢谢 :)

4

3 回答 3

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 中将条形设为黑色半透明,以便内容在它们下方流动。

于 2011-04-09T00:30:53.963 回答
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。

于 2012-07-25T11:43:57.587 回答
0

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

于 2011-04-08T14:47:48.477 回答