UINavigationbar 通过外观设置阴影不起作用
Posted
技术标签:
【中文标题】UINavigationbar 通过外观设置阴影不起作用【英文标题】:UINavigationbar setting shadow through appearance does not work 【发布时间】:2017-03-25 16:04:12 【问题描述】:我正在尝试向我的导航栏添加阴影。代码如下所示:
UINavigationBar.appearance().barStyle = .black
UINavigationBar.appearance().barTintColor = UIColor(white: 155/255,
alpha: 1.0)
UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().layer.shadowOffset = CGSize(width: 0, height: 4)
UINavigationBar.appearance().layer.shadowRadius = 4.0
UINavigationBar.appearance().layer.shadowColor = UIColor.black.cgColor
UINavigationBar.appearance().layer.shadowOpacity = 0.4
UINavigationBar.appearance().layer.masksToBounds = false
UINavigationBar.appearance().layer.shouldRasterize = true
但它不起作用。为什么它不起作用,我错过了什么?我不想扩展或继承 NavigationBar 来执行此操作。
编辑: 我发现
UINavigationBar.appearance().layer.bounds
返回错误的值,所以可能就是这样,但有人知道为什么吗?
【问题讨论】:
看到一次***.com/questions/38783959/… 感谢@Anbu.Karthik,但我想使用外观来做到这一点,所以上面的链接对我没有多大帮助 @L3M0L 你能用外观方法做到吗? 听起来外观协议将仅使用 shadowImage 方法应用阴影 【参考方案1】:在您的viewDidLoad
中尝试以下代码。
navigationController?.navigationBar.layer.shadowColor = UIColor.black.cgColor
navigationController?.navigationBar.layer.shadowOpacity = 1
navigationController?.navigationBar.layer.shadowOffset = CGSize.zero
navigationController?.navigationBar.layer.shadowRadius = 10
navigationController?.navigationBar.layer.masksToBounds = false
输出:
【讨论】:
谢谢!然而,这不是我正在寻找的解决方案:(我想通过 UIAppearance 来做,所以阴影到处都是一样的。【参考方案2】:斯威夫特 3
扩展UINavigationBar
并定义所需的阴影属性
extension UINavigationBar
var shadow: Bool
get
return false
set
if newValue
self.layer.shadowOffset = CGSize(width: 0, height: 2)
self.layer.shadowColor = UIColor.lightGray.cgColor
self.layer.shadowRadius = 3
self.layer.shadowOpacity = 0.5;
从AppDelegate
全局添加阴影
UINavigationBar.appearance().shadow = true
学分Amer Harb
【讨论】:
以上是关于UINavigationbar 通过外观设置阴影不起作用的主要内容,如果未能解决你的问题,请参考以下文章
设置 UINavigationBar 外观 whenContainedInInstancesOf 到我的视图控制器不起作用
UINavigationBar 在 Modal 上的外观未设置
UIDocumentInteractionController 在 iOS 11 中不尊重 UINavigationBar 的 barTintColor 外观