【问题标题】:UINavigationBar set custom shadow in AppDelegate.swiftUINavigationBar 在 AppDelegate.swift 中设置自定义阴影
【发布时间】:2016-11-09 05:08:24
【问题描述】:

我想为整个应用程序在 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)
    }
}

【问题讨论】:

    标签: ios swift uinavigationbar shadow appdelegate


    【解决方案1】:

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

    扩展 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 = ""
    

    【讨论】:

      【解决方案2】:

      简单,适用于 Swift 3:

          navigationController?.navigationBar.layer.shadowColor = UIColor.black.cgColor
          navigationController?.navigationBar.layer.shadowOpacity = 1
          navigationController?.navigationBar.layer.shadowOffset = CGSize.zero
          navigationController?.navigationBar.layer.shadowRadius = 10
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多