在视图控制器中重置导航栏的外观

Posted

技术标签:

【中文标题】在视图控制器中重置导航栏的外观【英文标题】:Reset the appearance of navigation bar in a view controller 【发布时间】:2020-02-09 16:59:36 【问题描述】:

我使用以下方法禁用了导航栏的底部边框线(阴影图像):

self.navigationController.navigationBar.setBackgroundImage(UIImage(), for: .default) 
self.navigationController.navigationBar.shadowImage = UIImage()

但在锁定设备并再次解锁后,会出现底部边框线。通过在 viewWillAppear:

中使用上述代码,我能够再次隐藏它

但我想知道是什么导致导航栏每次出现时都会重置为默认配置?

由于我无法使用以下代码使阴影线重新出现在另一个 ViewController 中:

self.navigationController.navigationBar.setBackgroundImage(nil, for: .default) 
self.navigationController.navigationBar.shadowImage = nil

我想知道如何重置导航栏外观以使底部边框线(阴影图像)重新出现?

【问题讨论】:

【参考方案1】:

解锁设备不会调用 viewWillAppear,可能是您使用 BaseViewController 并在 UIApplicationDidBecomeActiveNotification 上添加 Notification Observer

尝试在 AppDelegate 上使用 Appearance

    UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
    UINavigationBar.appearance().shadowImage = UIImage()

然后再次出现该行

    self.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
    self.navigationController?.navigationBar.shadowImage = nil

【讨论】:

嗨,谢谢。但是上面的代码不能让底线再次出现。我在其他答案中看到这样做是正确的代码,但它目前似乎不起作用。

以上是关于在视图控制器中重置导航栏的外观的主要内容,如果未能解决你的问题,请参考以下文章

常规高度导航栏的滚动边缘外观

模态 Segue 进入没有导航栏的导航控制器

带有导航栏的滚动视图控制器

将带有可见导航栏的视图控制器弹出到带有隐藏导航栏的视图控制器时,带有 interactivePopGestureRecognizer 的黑色区域

模态视图导航栏的位置 - iOS7

iOS 7:在底部导航栏的表格视图之间滑动