UINavigationBar को पारदर्शी बनाएं


235

आप UINavigationBar को पारदर्शी कैसे बनाते हैं ? हालांकि मैं चाहता हूं कि इसके बार आइटम दिखें।

जवाबों:


635

अगर कोई सोच रहा है कि इसे 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 से कम सिस्टम अपारदर्शिता लागू करेगा।


29
यहाँ अपनी टिप्पणी का उत्तर देना; प्रभाव की कोशिश को पूर्ववत करने के लिए:[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = nil; self.navigationController.navigationBar.translucent = NO;
जोहान बर्गेस

मुझे पारदर्शी नेवले के लिए केवल एक वीसी की जरूरत है। उस वीसी से बाहर निकलने के बाद मैं मूल शैली में वापस कैसे आऊं?
गिलहर्मे

2
ViewController के भीतर से स्विफ्ट में इसे प्राप्त करने के लिए, इसे इस तरह से करें: self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.translucent = true
datayeah

रूप में अच्छी तरह से (iOS7 / 8) का उपयोग कर काम करता है, देखें: gist.github.com/mpycio/ddbdea1adb6b86cf02f6
महाकाल

1
मेरे लिए प्रभाव को केवल आंशिक रूप से काम करता है। क्योंकि मैं ऐसा करने के बाद, मेरे सभी टेबल हेडर बहुत बड़े हैं। ऐप-वाइड, जो अजीब है। (मैं केवल एक नियंत्रक के लिए यह प्रभाव चाहता हूं जिसे मैं स्टैक पर धक्का देता हूं।)
हेनिंग

29

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];

6
IOS 6 में आप नेविगेशन बार शैडो को भी हटाना चाहेंगे, नहीं तो यह अजीब लगेगा। [[UINavigationBar appearance] setShadowImage: [[UIImage alloc] init]];
राबर्ट

23

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];

14

जो कोई भी स्विफ्ट 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

2
navigationController एक वैकल्पिक संपत्ति है, इसलिए आपको इसे खोलना होगा। बस self.navigationController जोड़ें ।navigationBar और आप जाने के लिए अच्छे हैं
Daniel Galasko

10

यह काम करने लगता है:

@implementation UINavigationBar (custom)
- (void)drawRect:(CGRect)rect {}
@end

navigationController.navigationBar.backgroundColor = [UIColor clearColor];

6
ऐसा लगता है कि iOS 5 में आपको -drawRect:एक उपवर्ग में उचित ओवरराइड करना चाहिए , एक श्रेणी में नहीं, और फिर इस उपवर्ग को अपने नेविगेशन बार के रूप में उपयोग करें।
यांग मेयर

9

ऐसा करने के बाद बाकी सभी ने ऊपर कहा:

navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController!.navigationBar.isTranslucent = true

... मेरा नेविगेशन बार अभी भी सफेद था । इसलिए मैंने इस लाइन को जोड़ा:

navigationController?.navigationBar.backgroundColor = .clear

... वेट वॉयला! वह चाल के समान लग रहा था।


7

यदि आप अंतिम बीटा 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
        }
    }
}

बहुत बढ़िया! सिर्फ एक तय खोज रहा था! बहुत अच्छा काम करता है! धन्यवाद!
जॉर्ज

5

मुझे पता है कि यह विषय पुराना है, लेकिन अगर लोग जानना चाहते हैं कि ड्रॉअर विधि को ओवरलोड किए बिना कैसे किया जाता है।

यह वही चीज़ है जिसकी आपको आवश्यकता है:

self.navigationController.navigationBar.translucent = YES;
self.navigationController.navigationBar.opaque = YES;
self.navigationController.navigationBar.tintColor = [UIColor clearColor];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];

1
माफ करना, यह सही नहीं है। आपको अभी भी ड्राअर विधि को ओवरराइड करना है
सैंडर

यह गलत क्यों है? ऐसा लगता है कि IOS 6 सिम में काम कर रहा है। यह IOS 5 में काम नहीं कर रहा है? navigationBar.backgroundColor को अनिर्दिष्ट लगता है।
क्रिस्टी

5

नीचे दी गई सीमा से छुटकारा पाने और पाठ रंग सेट करने के लिए, नीचे दिए गए शीर्ष उत्तर पर इस कोड का विस्तार होता है:

  1. इस कोड की अंतिम दो कोडित लाइनों में पारदर्शिता है। मैंने इस धागे से उस कोड को उधार लिया और इसने पूरी तरह से काम किया!

  2. "क्लिपटॉब" प्रॉपर्टी कोड था जिसे मैंने पाया था जो बिना किसी पारदर्शिता सेट के साथ या बिना नीचे की सीमा रेखा से छुटकारा पा गया था (इसलिए यदि आप इसके बजाय एक ठोस सफेद / काला / आदि पृष्ठभूमि के साथ जाने का फैसला करते हैं, तो भी कोई सीमा रेखा नहीं होगी)।

  3. "टिंटकलर" लाइन (दूसरी कोडेड लाइन) ने मेरे बैक बटन को हल्के भूरे रंग में सेट किया

  4. मैंने एक बैकअप के रूप में 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()

3

स्विफ्ट 3.0 के लिए:

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    navigationController?.navigationBar.shadowImage = UIImage()
    navigationController?.navigationBar.isTranslucent = true
}

3

C # / Xamarin समाधान

NavigationController.NavigationBar.SetBackgroundImage(new UIImage(), UIBarMetrics.Default);
NavigationController.NavigationBar.ShadowImage = new UIImage();
NavigationController.NavigationBar.Translucent = true;

2

निम्नलिखित कोड का प्रयास करें:

self.navigationController.navigationBar.translucent = YES;

1

मेरे लिए काम करने का एक और तरीका है उपक्लास यूनावीगेशनबेर और ड्राअरक्ट मेथड को खाली छोड़ देना !!

@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
}}

1

स्विफ्ट में 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

0

क्या आपका मतलब पूरी तरह से पारदर्शी है, या फ़ोटो ऐप में देखी गई पारभासी-काली शैली का उपयोग करना है? उत्तरार्द्ध आप अपनी barStyleसंपत्ति को निर्धारित करके पूरा कर सकते हैं UIBarStyleBlackTranslucent। पूर्व ... मुझे यकीन नहीं है। यदि आप चाहते हैं कि इस पर मौजूद वस्तुएँ अभी भी दिखाई दें, तो आपको बार के दृश्य पदानुक्रम में चारों ओर कुछ खुदाई करनी पड़ सकती है और इसके पृष्ठभूमि वाले दृश्य को हटा सकते हैं।


2
मेरा मतलब पूर्व से है। मैंने एक श्रेणी बनाने की कोशिश की और UINavigationBar के ड्रॉ पद्धति को पछाड़ दिया (CGContextClearRect को शामिल करते हुए), लेकिन इसने इसे पूरी तरह से काला बना दिया। आइटम अभी भी दिखाई दे रहे थे।
क्वानो

0

यह स्विफ्ट 2.0 के लिए काम करता है।

navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
navigationController!.navigationBar.shadowImage = UIImage()
navigationController!.navigationBar.translucent = true

0

RRViewControllerExtension की जांच करें , जो कि UINavigation बार उपस्थिति प्रबंधन पर समर्पित है।

अपने प्रोजेक्ट में RRViewControllerExtension के साथ, आपको बस ओवरराइड करने की आवश्यकता है

-(BOOL)prefersNavigationBarTransparent;

आप में देखने के लिए।

नेविगेशन बार पारदर्शी


-2
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)
            }
        }
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.