SO中有许多答案可以提供隐藏导航栏阴影的解决方案 . 除了我在这里描述的这个特殊情况,这些对我有用 . 因此,这个问题不重复 .
为了测试这种特殊情况,我使用master-detail app模板创建了一个新项目 . 在DetailViewController - > viewDidAppear中,我编写了以下代码:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
以上代码适用于Single View App和iPad Air 2模拟器 . 但是,它不适用于iPhoneX模拟器中的主从细节应用程序的detailViewController .
或者,我也尝试在viewDidAppear中检索navigationBar的子视图,并尝试隐藏阴影(请参阅下面的代码) . 但是,子视图计数为零 . 怎么会这样?
for parent in self.navigationController!.navigationBar.subviews {
for childView in parent.subviews {
if(childView is UIImageView) {
childView.removeFromSuperview()
}
}
}
对此有任何帮助非常感谢 .
1 回答
对于通用流程
您可以使用此设置 . 假设
ViewController
是所有其他视图控制器类(您想要阴影的地方),DetailViewController
是详细视图控制器类 .我正在做的事情是保留阴影图像 .
ViewController.swift
并且 DetailViewController.swift
Storyboard setup
Output
Note: 另一种巧妙的方法是将阴影存储在
DetailsViewController
中并在视图即将消失时进行设置这种解决方案更加优雅,可实现清洁管理 .
对于MasterDetailFlow,使用SplitViewController
在你的 MasterViewControlelr.swift
在你的 DetailViewController.swift
Output(Master/Detail flow)