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



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

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

但是在锁定设备并再次解锁后,会出现底部边框线。我能够在viewWillAppear中使用上面的代码再次隐藏它:

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

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

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

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

解锁设备不会调用viewWillAppear,可能是您正在使用BaseViewController,并在UIApplication上添加通知观察器DidBecomeActiveNotification

尝试在应用程序委托上改用外观

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

并再次出现该行

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

您可以尝试使用方便的功能创建UINavigationViewController扩展:

extension UINavigationController {
func resetToDefaultAppearance() {
let appearance = UINavigationBarAppearance()
appearance.configureWithDefaultBackground()
navigationBar.standardAppearance = appearance
navigationBar.scrollEdgeAppearance = appearance
navigationBar.standardAppearance = appearance
navigationBar.compactScrollEdgeAppearance = appearance
}
}

然后在您的viewWillDisappear中调用它:

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.resetToDefaultAppearance()
}

最新更新