我在编程方面向UINavigationController
添加了UIViewController
,如下所示:
UINavigationController * nc = [[UINavigationController alloc] initWithRootViewController:[ViewController fromStoryboardNamed:@"myVC"]];
在调试视图层次结构中,我看到UIBackdropView
后面有一个名为UINavigationBar
的视图,背景为灰色。您可以在屏幕截图中看到:
我试图在文档中找到它,但我找不到任何。
我们可以访问这一层吗?
这会导致1像素灰线显示在UINavigationBar
下方。是否可以删除/隐藏_UIBackDropView
?
我试图通过在UIView
下添加一个白色背景颜色的简单UINavigationBar
来混合这个1像素线,它覆盖了这条暗线,并且工作正常。我想知道如果有办法隐藏/删除BackdropView
,而不是在其上添加UIView
。
答案 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轻松删除细线,而不会影响模糊。