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

问题描述 投票:4回答:1

我有一个导航栏,prefersLargeTitles设置为True。单击表格视图中的单元格以显示详细视图时,我希望导航栏使用以下内容变为透明,这样可以正常工作:

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true

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

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

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

Initial

enter image description here

ios swift uinavigationbar
1个回答
0
投票

这在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()
}
© www.soinside.com 2019 - 2024. All rights reserved.