如何从导航栏中删除阴影线?

时间:2015-08-25 15:42:23

标签: ios uinavigationcontroller uinavigationbar

我在编程方面向UINavigationController添加了UIViewController,如下所示:

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

在调试视图层次结构中,我看到UIBackdropView后面有一个名为UINavigationBar的视图,背景为灰色。您可以在屏幕截图中看到:

enter image description here

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

我们可以访问这一层吗?

这会导致1像素灰线显示在UINavigationBar下方。是否可以删除/隐藏_UIBackDropView

我试图通过在UIView下添加一个白色背景颜色的简单UINavigationBar来混合这个1像素线,它覆盖了这条暗线,并且工作正常。我想知道如果有办法隐藏/删除BackdropView,而不是在其上添加UIView

2 个答案:

答案 0 :(得分:4)

正式地说,这只能通过将navigationBar的shadowImage设置为空图像来实现,如另一个答案中所述。但是,仔细看一下文档,就说:

  

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

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

"发际线"是一个UIImageView,它是导航栏的子视图。您可以找到它并将其设置为隐藏。例如,这就是Apple在其原生日历应用中所做的事情。只需迭代子视图,并将图像视图设置为隐藏。

答案 1 :(得分:0)

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

删除一个像素下划线的最简单,最快捷的解决方案是:

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

然而,它会消除模糊,可能不是你想要的。您可以使用UINavigationBar-Addition轻松删除细线,而不会影响模糊。