UINavigationBar 的阴影是在什么时候显示的?(iOS 6)

3
我正在使用带有自定义背景图像的导航栏。当我想要添加自定义阴影图像时,我惊讶地发现即使默认的阴影图像也不可见。
iOS 6引入了UINavigationBars上的自动投影,我希望能看到它。来自http://www.raywenderlich.com/21703/user-interface-customization-in-ios-6的示例项目演示了这一点。
然而,从Xcode的Master-Detail模板创建一个新项目并不会显示阴影。
什么时候会显示阴影,什么时候不会?

你解决了吗?我也遇到了同样的问题。 - sarunw
在Xcode 4.5中,我仍然遇到这个问题。 - Yang Meyer
1
我遇到了类似的问题。在某些VC中显示,而在其他一些VC中不显示。特别是那些我以前创建的(可能是使用Xcode 4.5创建的)没有显示出来。有什么想法吗?我无法重新创建它们,这对我来说听起来很疯狂... - StuFF mc
5个回答

3

IOS 6自动显示默认的下拉阴影。如果您想要禁用/隐藏此阴影,可以尝试以下方法:

[[UINavigationBar appearance]setShadowImage:[[UIImage alloc] init]];

我注意到的是,如果我将一个视图控制器从一个项目复制/粘贴到一个新项目中,导航栏阴影有时不会显示。用一个新的视图控制器替换复制的视图控制器可以解决这个问题...(也许适用于你的情况)。

1

我后来发现的解决方法其实非常简单,令人尴尬:

self.navigationController.navigationBar.clipsToBounds = NO;

这就是说,我仍然认为这是Xcode 4.4/4.5在storyboards中配置导航栏时的一个bug。但至少现在我们知道了如何解决它。干杯!

1

我在一个从iOS5升级的项目中遇到了同样的问题,但只有在早期版本的Xcode中插入导航控制器时才会出现。在最新版本的Xcode(4.6)中将它们移除并替换为新的控制器可以解决这个问题。


0

除了Yang的回答,你可以创建一个类别来实现全局修复,像这样

@interface UINavigationBar (JTDropShadowFix)

@end

@implementation UINavigationBar (JTDropShadowFix)

- (void)awakeFromNib {
    self.clipsToBounds = NO;
}

@end

如果您不想通过操纵类别方法来解决问题,您也可以查看一篇博客文章,了解如何使用UINavigationController子类来实现相同的修复。

http://ioscodesnippet.com/post/61487770156/custom-shadow-image-on-navigation-bar-ios6-fix


0

为了增加一些背景信息:我刚刚将我的一年级应用程序 Cocktailicious 嵌入到一个 UITabBarController 中的根 UINavigationView 中。在此之后,旧的 UINavigationBar 在界面构建器中具有属性 Clip Subviews

在嵌入过程中,我还为选项卡栏中的新标签添加了第二个导航控制器。令人惊讶的是,这个控制器没有选中 Clip Subviews。感觉像是 Xcode 的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接