जवाबों:
अगर कोई सोच रहा है कि इसे iOS 7+ में कैसे हासिल किया जाए, तो यहां एक समाधान है (iOS 6 संगत भी)
ऑब्जेक्टिव-सी में
[self.navigationBar setBackgroundImage:[UIImage new]
forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;
स्विफ्ट 3 (iOS 10) में
self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.isTranslucent = true
स्विफ्ट 2 में
self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.translucent = true
स्थापना translucent
के लिए YES
नेविगेशन पट्टी पर एक व्यवहार में चर्चा की वजह से, काम कर देता है UINavigationBar
प्रलेखन। मैं यहाँ प्रासंगिक अंश की रिपोर्ट करूँगा:
यदि आप इस संपत्ति को
YES
एक अपारदर्शी कस्टम पृष्ठभूमि छवि के साथ एक नेविगेशन बार पर सेट करते हैं , तो नेविगेशन बार छवि से 1.0 से कम सिस्टम अपारदर्शिता लागू करेगा।
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.translucent = true
IOS5 में आप नेविगेशन बार को पारदर्शी बनाने के लिए ऐसा कर सकते हैं:
nav.navigationBar.translucent = YES; // Setting this slides the view up, underneath the nav bar (otherwise it'll appear black)
const float colorMask[6] = {222, 255, 222, 255, 222, 255};
UIImage *img = [[UIImage alloc] init];
UIImage *maskedImage = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(img.CGImage, colorMask)];
[nav.navigationBar setBackgroundImage:maskedImage forBarMetrics:UIBarMetricsDefault];
[img release];
[[UINavigationBar appearance] setShadowImage: [[UIImage alloc] init]];
IOS7 से:
self.navigationController.navigationBar.translucent = YES;
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.view.backgroundColor = [UIColor clearColor];
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
जो कोई भी स्विफ्ट 2.x में ऐसा करना चाहता है:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.translucent = true
या स्विफ्ट 3.x:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
यह काम करने लगता है:
@implementation UINavigationBar (custom)
- (void)drawRect:(CGRect)rect {}
@end
navigationController.navigationBar.backgroundColor = [UIColor clearColor];
-drawRect:
एक उपवर्ग में उचित ओवरराइड करना चाहिए , एक श्रेणी में नहीं, और फिर इस उपवर्ग को अपने नेविगेशन बार के रूप में उपयोग करें।
ऐसा करने के बाद बाकी सभी ने ऊपर कहा:
navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController!.navigationBar.isTranslucent = true
... मेरा नेविगेशन बार अभी भी सफेद था । इसलिए मैंने इस लाइन को जोड़ा:
navigationController?.navigationBar.backgroundColor = .clear
... वेट वॉयला! वह चाल के समान लग रहा था।
यदि आप अंतिम बीटा iOS 13.4 और XCode 11.4 के साथ निर्माण करते हैं, तो स्वीकृत उत्तर अब काम नहीं करेगा। मुझे एक और रास्ता मिल गया है, शायद यह बीटा सॉफ़्टवेयर में एक बग है, लेकिन मैं इसे नीचे लिख रहा हूं, बस मामले में
(स्विफ्ट 5)
import UIKit
class TransparentNavBar :UINavigationBar {
override func awakeFromNib() {
super.awakeFromNib()
self.setBackgroundImage(UIImage(), for: .default)
self.shadowImage = UIImage()
self.isTranslucent = true
self.backgroundColor = .clear
if #available(iOS 13.0, *) {
self.standardAppearance.backgroundColor = .clear
self.standardAppearance.backgroundEffect = .none
self.standardAppearance.shadowColor = .clear
}
}
}
मुझे पता है कि यह विषय पुराना है, लेकिन अगर लोग जानना चाहते हैं कि ड्रॉअर विधि को ओवरलोड किए बिना कैसे किया जाता है।
यह वही चीज़ है जिसकी आपको आवश्यकता है:
self.navigationController.navigationBar.translucent = YES;
self.navigationController.navigationBar.opaque = YES;
self.navigationController.navigationBar.tintColor = [UIColor clearColor];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
नीचे दी गई सीमा से छुटकारा पाने और पाठ रंग सेट करने के लिए, नीचे दिए गए शीर्ष उत्तर पर इस कोड का विस्तार होता है:
इस कोड की अंतिम दो कोडित लाइनों में पारदर्शिता है। मैंने इस धागे से उस कोड को उधार लिया और इसने पूरी तरह से काम किया!
"क्लिपटॉब" प्रॉपर्टी कोड था जिसे मैंने पाया था जो बिना किसी पारदर्शिता सेट के साथ या बिना नीचे की सीमा रेखा से छुटकारा पा गया था (इसलिए यदि आप इसके बजाय एक ठोस सफेद / काला / आदि पृष्ठभूमि के साथ जाने का फैसला करते हैं, तो भी कोई सीमा रेखा नहीं होगी)।
"टिंटकलर" लाइन (दूसरी कोडेड लाइन) ने मेरे बैक बटन को हल्के भूरे रंग में सेट किया
मैंने एक बैकअप के रूप में barTintColor को रखा। मुझे नहीं पता कि पारदर्शिता क्यों नहीं चलेगी, लेकिन अगर ऐसा नहीं होता है, तो मुझे अपना बीजी सफेद चाहिए जैसा कि मेरे पास था
let navigationBarAppearace = UINavigationBar.appearance()
navigationBarAppearace.tintColor = UIColor.lightGray
navigationBarAppearace.barTintColor = UIColor.white
navigationBarAppearace.clipsToBounds = true
navigationBarAppearace.isTranslucent = true
navigationBarAppearace.setBackgroundImage(UIImage(), for: .default)
navigationBarAppearace.shadowImage = UIImage()
NavigationController.NavigationBar.SetBackgroundImage(new UIImage(), UIBarMetrics.Default);
NavigationController.NavigationBar.ShadowImage = new UIImage();
NavigationController.NavigationBar.Translucent = true;
मेरे लिए काम करने का एक और तरीका है उपक्लास यूनावीगेशनबेर और ड्राअरक्ट मेथड को खाली छोड़ देना !!
@IBDesignable class MONavigationBar: UINavigationBar {
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
// Drawing code
}}
स्विफ्ट में 4.2
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
(viewWillAppear में), और फिर viewWillDisappear में, इसे पूर्ववत करने के लिए, डाल दिया
self.navigationController?.navigationBar.shadowImage = nil
self.navigationController?.navigationBar.isTranslucent = false
क्या आपका मतलब पूरी तरह से पारदर्शी है, या फ़ोटो ऐप में देखी गई पारभासी-काली शैली का उपयोग करना है? उत्तरार्द्ध आप अपनी barStyle
संपत्ति को निर्धारित करके पूरा कर सकते हैं UIBarStyleBlackTranslucent
। पूर्व ... मुझे यकीन नहीं है। यदि आप चाहते हैं कि इस पर मौजूद वस्तुएँ अभी भी दिखाई दें, तो आपको बार के दृश्य पदानुक्रम में चारों ओर कुछ खुदाई करनी पड़ सकती है और इसके पृष्ठभूमि वाले दृश्य को हटा सकते हैं।
RRViewControllerExtension की जांच करें , जो कि UINavigation बार उपस्थिति प्रबंधन पर समर्पित है।
अपने प्रोजेक्ट में RRViewControllerExtension के साथ, आपको बस ओवरराइड करने की आवश्यकता है
-(BOOL)prefersNavigationBarTransparent;
आप में देखने के लिए।
extension UINavigationBar {
var isTransperent: Bool {
get {
return false // Just to satisfy property
}
set {
if newValue == true {
self.shadowImage = UIImage()
self.isTranslucent = true
self.setBackgroundImage(UIImage(), for: .default)
}else{
self.shadowImage = UIImage()
self.isTranslucent = false
self.setBackgroundImage(nil, for: .default)
}
}
}
}
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = nil; self.navigationController.navigationBar.translucent = NO;