ios - UINavigationBar 在 AppDelegate.swift 中设置自定义阴影

标签 ios swift uinavigationbar shadow appdelegate

我想为整个应用程序的 UINavigationBar 底部设置一些阴影。这是我尝试过但不起作用的方法:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    UINavigationBar.appearance().layer.shadowOffset = CGSizeMake(0, 3)
    UINavigationBar.appearance().layer.shadowRadius = 3.0
    UINavigationBar.appearance().layer.shadowColor = UIColor.yellowColor().CGColor
    UINavigationBar.appearance().layer.shadowOpacity = 0.7
}

请告诉我该怎么做?

更新: 通过继承 UINavigationController 解决

import UIKit

class ShadowUINavigationController: UINavigationController {

    override func viewWillAppear(animated: Bool) {
        let darkColor: CGColorRef = UIColor(hex: 0x212121).CGColor
        let lightColor: CGColorRef = UIColor.clearColor().CGColor
        let navigationBarBottom: CGFloat = self.navigationBar.frame.origin.y + self.navigationBar.frame.size.height + 20
        println(self.navigationBar.frame.origin.y)
        println(self.navigationBar.frame.size.height)
        println(navigationBarBottom)

        let newShadow: CAGradientLayer = CAGradientLayer()
        newShadow.frame = CGRectMake(0, navigationBarBottom, self.view.frame.size.width, 1)
        newShadow.colors = [darkColor, lightColor]
        self.view.layer.addSublayer(newShadow)
        super.viewWillAppear(animated)
    }
}

最佳答案

更好的解决方案仍然使用外观并且不需要您子类化 UINavigationBar 并向每个导航 Controller 添加代码,将是:

扩展 UINavigationBar

extension UINavigationBar {

  var castShadow : String {
    get { return "anything fake" }
    set {
        self.layer.shadowOffset = CGSizeMake(0, 3)
        self.layer.shadowRadius = 3.0
        self.layer.shadowColor = UIColor.yellowColor().CGColor
        self.layer.shadowOpacity = 0.7

    }
  }

}

并添加应用范围内的外观规则(例如在 appdelegate "didFinishLaunchingWithOptions"中)

UINavigationBar.appearance().castShadow = ""

关于ios - UINavigationBar 在 AppDelegate.swift 中设置自定义阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31756230/

相关文章:

ios - 模拟器是否可以很好地判断 iOS 兼容性?

ios - 我如何创建一个 UIPageViewController,其中所有屏幕都不同并且有自己的 ViewControllers?

ios - 覆盖 UICollectionViewCell 的 estimatedItemSize

ios - 使用 CGGradientRef 填充 UINavigationBar 背景

ios - 导航栏 :shouldPop is not functioning as expected

ios - 向我的 UIView 添加阴影的最佳方法是什么

iphone - 通过 UIPanGestureRecognizer 很好地移动 View ,但有时会跳动

objective-c - iOS:问题保存照片

arrays - 列出字符串数组中所有元组的算法

ios - 无法将导航栏添加到场景 : Root view controller issue?