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 外观

在iOS 11中忽略设置UINavigationBar外观

为所有导航栏 (UINavigationBar) iOS 5.1+ 设置按钮和外观

如何将透明的“大标题”UINavigationBar 重置为默认外观设置?