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

Posted

技术标签:

【中文标题】如何从导航栏中删除阴影线?【英文标题】:How to remove the shadow line from a navigation bar? 【发布时间】:2015-08-25 15:42:23 【问题描述】:

我以编程方式向我的UIViewController 添加了UINavigationController,如下所示:

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

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

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

我们可以访问这个层吗?

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

我尝试通过在覆盖这条暗线的UINavigationBar 下添加一个简单的UIView 与白色背景颜色来混合这1 像素线,并且效果很好。我想知道是否有办法隐藏/删除BackdropView,而不是在上面添加UIView

【问题讨论】:

【参考方案1】:

正如另一个答案中提到的,这只能通过将导航栏的shadowImage 设置为空图像来实现。不过仔细看文档,是这样说的:

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

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

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

实际上我想删除视图只是因为它在导航栏下添加了 1 像素线 你可以看到如何隐藏它,这是我的答案的一部分,还添加了对已经问过这个问题的 *** 线程的引用。 @T_77 阴影图像是不同的视图。 @gontovnik Blur 在您的解决方案中被禁用。 它是在导航栏@LeoNatan 下创建 1 像素线的原因吗?如何删除它?

以上是关于如何从导航栏中删除阴影线?的主要内容,如果未能解决你的问题,请参考以下文章

如何从导航栏中删除 UIPageControl?

如何从导航栏中删除 UISwipeGestureRecognizer

有人知道如何从导航栏中删除不需要的动画吗?截图

登录后如何从导航栏中删除登录按钮

如何从自定义导航栏中删除这条黑线

从 SwiftUI 中的导航栏中删除后退按钮文本