NavigationController 在 push 和 pop 后会切掉阴影吗?
Posted
技术标签:
【中文标题】NavigationController 在 push 和 pop 后会切掉阴影吗?【英文标题】:NavigationController cut the shadow after push and pop? 【发布时间】:2020-01-29 12:47:11 【问题描述】:当我向 navigationBar 添加自定义视图并且此视图有阴影时,NavigationController 出现问题,再次推送和弹出时阴影会被剪切?
1:- 推送前的 ViewController A
2:- 推送后的 ViewController B
3:- 弹出后的 ViewController A
这是一个非常简单的类,只包含这段代码
override func viewDidLoad()
super.viewDidLoad()
let view : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 40))
view.layer.shadowOpacity = 1
view.layer.shadowOffset = CGSize(width: 1.0, height: 1.0)
view.layer.shadowRadius = 20.0
view.layer.shadowColor = UIColor.green.cgColor
view.clipsToBounds = false
view.layer.masksToBounds = false
view.backgroundColor = UIColor.red
self.navigationController?.navigationBar.topItem?.titleView = view
【问题讨论】:
【参考方案1】:基于一些快速检查...
.navigationBar
有一个“contentView”。
在最初出现时,该 contentView 将 .clipsToBounds
设置为 false
。
一旦你将一个 VC 压入堆栈,该 contentView 的 .clipsToBounds
属性将变为 true
。
这就是为什么你最初可以看到阴影。
我认为您需要找到另一种方法来获得这种外观...您可以尝试子类化,但 Apple 的文档明确指出:
允许使用 UINavigationBar 类的方法和属性自定义导航栏的外观,但您绝不能更改其框架、边界或 alpha 值或直接修改其视图层次结构。
【讨论】:
以上是关于NavigationController 在 push 和 pop 后会切掉阴影吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 NavigationController 保持在 subViewController 方向?
在呈现的 ViewController/NavigationController 上获取 UITabBarController
无法推送 viewController,因为 navigationController 为 nil
在 TabBarController 项中有一个 NavigationController
在 iOS 上的 navigationController 推送上更改 contentSizeForViewInPopover