[英]UINavigationBar set custom shadow in AppDelegate.swift
我想在整個應用程序的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子類化並向每個導航控制器添加代碼的更好解決方案是:
擴展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 = ""
簡單,適用於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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.