【问题标题】: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

【问题讨论】:

    标签: ios uinavigationcontroller uinavigationbar


    【解决方案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 像素线
      • 你可以看到如何隐藏它,这是我的答案的一部分,还添加了对已经问过这个问题的 stackoverflow 线程的引用。
      • @T_77 阴影图像是不同的视图。
      • @gontovnik Blur 在您的解决方案中被禁用。
      • 它是在导航栏@LeoNatan 下创建 1 像素线的原因吗?如何删除它?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 2016-07-02
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多