IOS 13 के लिए:
.shadowColor
संपत्ति का उपयोग करें
यदि यह गुण शून्य है या इसमें स्पष्ट रंग है, तो बार कोई छाया नहीं दिखाता है
उदाहरण के लिए:
let navigationBar = navigationController?.navigationBar
let navigationBarAppearence = UINavigationBarAppearance()
navigationBarAppearence.shadowColor = .clear
navigationBar?.scrollEdgeAppearance = navigationBarAppearence
IOS 12 और उससे नीचे के लिए:
ऐसा करने के लिए, आपको एक कस्टम छाया चित्र सेट करना चाहिए। लेकिन छाया छवि दिखाए जाने के लिए आपको एक कस्टम पृष्ठभूमि छवि सेट करने की आवश्यकता है, Apple के प्रलेखन से बोली:
दिखाई जाने वाली एक कस्टम शैडो इमेज के लिए, कस्टम बैकग्राउंड इमेज को setBackgroundImage (_: for :) विधि के साथ भी सेट किया जाना चाहिए। यदि डिफ़ॉल्ट पृष्ठभूमि छवि का उपयोग किया जाता है, तो इस संपत्ति के मूल्य की परवाह किए बिना डिफ़ॉल्ट छाया छवि का उपयोग किया जाएगा।
इसलिए:
let navigationBar = navigationController!.navigationBar
navigationBar.setBackgroundImage(#imageLiteral(resourceName: "BarBackground"),
for: .default)
navigationBar.shadowImage = UIImage()
ऊपर इसे छिपाने का एकमात्र "आधिकारिक" तरीका है। दुर्भाग्य से, यह बार की पारभासी को हटा देता है।
मुझे पृष्ठभूमि की छवि नहीं चाहिए, बस रंग चाहिए
आपके पास वे विकल्प हैं:
ठोस रंग, कोई पारभासी:
navigationBar.barTintColor = UIColor.redColor()
navigationBar.isTranslucent = false
navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationBar.shadowImage = UIImage()
रंग से भरी छोटी पृष्ठभूमि की छवि बनाएं और उसका उपयोग करें।
नीचे वर्णित 'हैकी' विधि का उपयोग करें। यह बार पारभासी भी रखेगा।
बार पारभासी कैसे रखें?
पारभासी रखने के लिए आपको एक और दृष्टिकोण की आवश्यकता होती है, यह एक हैक की तरह दिखता है लेकिन अच्छी तरह से काम करता है। जिस छाया को हम हटाने की कोशिश कर रहे हैं वह UIImageView
कहीं नीचे एक हेयरलाइन है UINavigationBar
। हम इसे पा सकते हैं और जरूरत पड़ने पर इसे छिपा सकते हैं / दिखा सकते हैं।
नीचे दिए गए निर्देश मान लें कि आपको अपनी UINavigationController
पदानुक्रम के केवल एक नियंत्रक में छिपी हेयरलाइन की आवश्यकता है।
उदाहरण चर घोषित करें:
private var shadowImageView: UIImageView?
वह विधि जोड़ें जो इस छाया को ढूंढती है (हेयरलाइन) UIImageView:
private func findShadowImage(under view: UIView) -> UIImageView? {
if view is UIImageView && view.bounds.size.height <= 1 {
return (view as! UIImageView)
}
for subview in view.subviews {
if let imageView = findShadowImage(under: subview) {
return imageView
}
}
return nil
}
जोड़ें / संपादित करें viewWillAppear/viewWillDisappear
तरीके:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if shadowImageView == nil {
shadowImageView = findShadowImage(under: navigationController!.navigationBar)
}
shadowImageView?.isHidden = true
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
shadowImageView?.isHidden = false
}
एक ही विधि को UISearchBar
हेयरलाइन के लिए भी काम करना चाहिए , और (लगभग) कुछ और जिसे आपको छिपाने की आवश्यकता है :)
मूल विचार के लिए @Leo Natan को बहुत धन्यवाद!