2015-08-25 63 views
0

我添加了一个UINavigationControllerUIViewController编程像以下:如何从导航栏中删除阴影线?

UINavigationController * nc = [[UINavigationController alloc] initWithRootViewController:[ViewController fromStoryboardNamed:@"myVC"]]; 

,并在调试视图层次我看到有一个叫UIBackdropViewUINavigationBar与灰色的背景后面视图。你可以看到,在截图:

enter image description here

我试图找到它的文档,但我找不到任何。

我们可以访问此图层吗?

这会导致1像素的灰线出现在UINavigationBar下。是否可以删除/隐藏_UIBackDropView

我试图通过添加一个简单的UIViewUINavigationBar覆盖这条黑暗线下的白色背景色混合这1像素线,它运行良好。我想知道如果有一种方法可以隐藏/删除BackdropView而不是在其上添加UIView

回答

4

正式的,这只能通过将navigationBar的shadowImage设置为空图像来实现,正如另一个答案中提到的那样。但是,仔细查看说明文件,则说:

对于要显示的自定义阴影图像,还必须使用setBackgroundImage:forBarMetrics:方法设置自定义背景图像。如果使用默认背景图像,则将使用默认阴影图像,而不管此属性的值如何。

通过使用自定义背景图像,您将失去模糊的背景半透明,这可能不是你想要的。

“发际线”是UIImageView,它是导航栏的子视图。你可以找到它并将它设置为隐藏。例如,苹果在其本机日历应用程序中就是这样做的。只需迭代子视图,并将图像视图设置为隐藏。

0

这是Apple私人API。您可以尝试使用超级视图访问它,或使用valueForKey。但是,我不会推荐使用它。首先,苹果可能会拒绝你的申请。此外,所有Apple构建视图的结构可能随时发生变化,您的应用程序可能会遇到问题。有关_UIBackdropView的更多信息,您可以找到here

最简单快捷的解决方案,除去一个像素强调的是这一个:

[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; 
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]]; 

但是它会删除模糊,什么是可能不是你想要的。您可以使用UINavigationBar-Addition轻松删除发际线,而不会影响模糊效果。

+0

其实我想删除视图只是因为它添加了导航栏下的1像素线 –

+0

您可以看到如何隐藏它,它是我的答案的一部分,并且还添加了引用到一个stackoverflow线程,其中此问题是已经问过。 – gontovnik

+0

@ T_77阴影图像是一个不同的视图。 –