我使用以下方法禁用了导航栏的底部边框线(阴影图像(:
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()
}