2016-12-08 19 views
9

दोनों पर ढाल सेट करना मैं एक परत बनाकर नेविगेशन बार की पृष्ठभूमि को बदलने और नेविगेशन बार में एक उपन्यास के रूप में जोड़ने की कोशिश कर रहा हूं। हालांकि, यह केवल नेविगेशन बार को प्रभावित कर रहा है।नेविगेशन बार और स्टेटस बार

1

मैं इसे स्क्रीन के पूरे शीर्ष प्रभावित करने के लिए wan't। संहिता में शामिल हैं:

let navBarLayer = StyleUtils.createGradientLayerWithColors(color: StyleUtils.Colors.SKY_BLUE, frame: (self.navigationController?.navigationBar.bounds)!) 

self.navigationController?.navigationBar.layer.addSublayer(navBarLayer) 

createGradientLayerWithColors समारोह दिया फ्रेम के लिए एक CAGradientLayer देता है।

मुझे क्या याद आ रही है? पहले ही, आपका बहुत धन्यवाद।

संपादित करें:

मैं नथानिएल जवाब कोशिश की, लेकिन यह मिल गया:

problem

यह उल्लेख है कि यह भी एक tableview है लायक है।

समाधान:

मैं इस question है कि मुझे इस समस्या का समाधान में मदद मिली पाया।

अंतिम सही कोड है:

func setNavBarColor() { 

    let navBar = self.navigationController?.navigationBar 

    //Make navigation bar transparent 
    navBar?.setBackgroundImage(UIImage(), for: .default) 
    navBar?.shadowImage = UIImage() 
    navBar?.isTranslucent = true 

    //Create View behind navigation bar and add gradient 
    let behindView = UIView(frame: CGRect(x: 0, y:0, width: UIApplication.shared.statusBarFrame.width, height: UIApplication.shared.statusBarFrame.height + (navBar?.frame.height)!)) 

    let layerTop = StyleUtils.createGradientLayerWithColors(color: StyleUtils.Colors.SKY_BLUE, frame: behindView.bounds) 
    behindView.layer.insertSublayer(layerTop, at: 0) 

    self.navigationController?.view.insertSubview(behindView, belowSubview: navBar!) 

} 
+0

मैंने इस विधि को UINavigationController के विस्तार में रखा है, जिसे इसे NavavarStyle प्रारंभ किया जाता है, और यह वास्तव में अच्छी तरह से काम करता है! – LargeGlasses

उत्तर

10

यह मैं इसे कैसे प्रबंधित करते हैं।

सबसे पहले मैं पारदर्शी करने के लिए NavigationBar सेट:

self.navigationBar.setBackgroundImage(UIImage(), for: .default) 
self.navigationBar.shadowImage = UIImage() 
self.navigationBar.isTranslucent = true 
self.navigationBar.backgroundColor = UIColor.clear 

तो मैं स्थिति पट्टी और नेविगेशन पट्टी के पीछे देखने के लिए ढाल जोड़ें:

let gradient = CAGradientLayer() 
    gradient.frame = CGRect(x: 0, y: 0, width: UIApplication.sharedApplication().statusBarFrame.width, height: UIApplication.sharedApplication().statusBarFrame.height + self.navigationController!.navigationBar.frame.height) 
    gradient.locations = [0.0,1.0] 
    gradient.colors = [UIColor.anyColor().colorWithAlphaComponent(0.4).CGColor, UIColor.clearColor().CGColor] 
    self.view.layer.addSublayer(gradient) 
    self.view.backgroundColor = UIColor.clear 
+0

मैंने आपके उत्तर की कोशिश की, लेकिन इसमें कुछ समस्याएं हैं। कृपया मेरा संपादन जांचें। Ps: मैंने प्रयोग के लिए अन्य रंगों का भी उपयोग किया। – PablodeAcero

+0

@PablodeAcero मैंने नेविगेशनबार पारदर्शी अनुभाग के अंत में एक पंक्ति जोड़ा - कोशिश करें! – Nathaniel

+1

हे। आपकी टिप्पणी ने इस मुद्दे को सही नहीं किया, लेकिन इससे मुझे समाधान की तलाश में मदद मिली। मदद के लिए आपका बहुत बहुत धन्यवाद! मैं इसे सही उत्तर के रूप में चिह्नित करूंगा और मैं अपने प्रश्न को उत्तर के साथ अपडेट करूंगा। – PablodeAcero

0

मेरे विकल्प:

let gradientLayer = CAGradientLayer() 

let layerY = -UIApplication.shared.statusBarFrame.size.height as CGFloat 

let layerHeight = (self.navigationController?.navigationBar.frame.size.height)! + UIApplication.shared.statusBarFrame.size.height as CGFloat 

gradientLayer.frame = CGRect(x: 0, y: layerY, width: 1366, height: layerHeight) 

gradientLayer.colors = [UIColor(red: 16/255.0, green: 57/255.0, blue: 82/255.0, alpha: 1.0).cgColor, UIColor(red: 17/255.0, green: 132/255.0, blue: 157/255.0, alpha: 1.0).cgColor] 

self.navigationController?.navigationBar.layer.addSublayer(gradientLayer) 

यह बेहतर नहीं है, बस ऐसा करने का एक और तरीका है।

संबंधित मुद्दे