为什么将 shadowImage 设置为 nil 不适用于 iOS 11?

cyr*_*ril 7 uinavigationbar ios swift

我有一个prefersLargeTitles设置为的导航栏True。单击表格视图中的单元格以显示详细信息视图时,我希望导航栏使用以下方法变得透明,这很好用:

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
Run Code Online (Sandbox Code Playgroud)

当按下详细视图上的后退按钮返回主视图控制器时,我调用:

self.navigationController?.navigationBar.setBackgroundImage(nil, for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = nil
Run Code Online (Sandbox Code Playgroud)

不幸的是,导航栏的阴影视图不会返回如下所示。我错过了什么?

最初的

在此处输入图片说明

Lan*_*ria 2

这在 Xcode 10.1、iOS 12.1 中对我有用。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // 1. hide it in the current view controller you want it hidden in
    navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
    navigationController?.navigationBar.layoutIfNeeded()
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)

    // 2. show it in when pushing or popping in the next view controller
    navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
    navigationController?.navigationBar.setValue(false, forKey: "hidesShadow")
    navigationController?.navigationBar.layoutIfNeeded()
}
Run Code Online (Sandbox Code Playgroud)