IOS 7 में पूरी तरह से पारदर्शी नेविगेशन बार कैसे बनाएं


127

मैं चाहता हूं कि मेरे ऐप में UINavigationBar पूरी तरह से पारदर्शी हो और इसके तहत सीधे व्यूकंट्रोलर के साथ फ्लश हो। हालाँकि, एकमात्र कोड मैं इसे पारभासी बना सकता हूं लेकिन पारदर्शी नहीं। मुझे पता है कि यह iOS 7 में किया जा सकता है क्योंकि यह नोट्स ऐप में उपयोग किया जाता है। मेरा सवाल यह है कि वे ऐसा कौन सा कोड है जो वे करते थे?

जवाबों:


295

से इस जवाब

[self.navigationController.navigationBar setBackgroundImage:[UIImage new]
                     forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.navigationBar.translucent = YES;
self.navigationController.view.backgroundColor = [UIColor clearColor];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];

टिप्पणियों में जोश द्वारा सुझाव के अनुसार, डिफ़ॉल्ट रूप से बार को वापस करने के लिए:

[self.navigationController.navigationBar setBackgroundImage:nil
                     forBarMetrics:UIBarMetricsDefault];

6
यह भी सुनिश्चित करें कि आपके पास नहीं हैself.edgesForExtendedLayout = UIRectEdgeNone;
daidai

25
क्या इसका उल्टा करने का कोई तरीका है?
जोराएर

12
@Zorayr [self.navigationController.navigationBar setBackgroundImage: nil forBarMetrics: UIBarMetricsDefault]; डिफ़ॉल्ट रूप से बार को वापस रख देगा।
जोश

7
क्या इस पद्धति का उपयोग करके नेविगेशन बार की पारदर्शिता को टॉगल करने का कोई तरीका है?
JYC

3
मैं इसे स्क्रॉलडायस्कॉल पर लागू करता हूं और एक छलांग लगाता हूं। कैसे ठीक करना है?
onmyway133

77

स्विफ्ट 3 और स्विफ्ट 4 के लिए

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

स्विफ्ट 2 के लिए ।2

 self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
 self.navigationController?.navigationBar.shadowImage = UIImage()
 self.navigationController?.navigationBar.translucent = true

उद्देश्य-सी के लिए

[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.navigationBar.translucent = YES;

1
धन्यवाद यह नेविगेशन बार को पूरी तरह से पारदर्शी करने के लिए एक आसान तरीका है
हांग झोउ

39

एक उद्देश्य-सी श्रेणी के रूप में स्व निहित समाधान:

UINavigationController + TransparentNavigationController.h

@interface UINavigationController (TransparentNavigationController)
- (void)presentTransparentNavigationBar;
- (void)hideTransparentNavigationBar;
@end

UINavigationController + TransparentNavigationController.m

#import "UINavigationController+TransparentNavigationController.h"

@implementation UINavigationController (TransparentNavigationController)

- (void)presentTransparentNavigationBar
{
  [self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
  [self.navigationBar setTranslucent:YES];
  [self.navigationBar setShadowImage:[UIImage new]];
  [self setNavigationBarHidden:NO animated:YES];
}

- (void)hideTransparentNavigationBar
{
  [self setNavigationBarHidden:YES animated:NO];
  [self.navigationBar setBackgroundImage:[[UINavigationBar appearance] backgroundImageForBarMetrics:UIBarMetricsDefault] forBarMetrics:UIBarMetricsDefault];
  [self.navigationBar setTranslucent:[[UINavigationBar appearance] isTranslucent]];
  [self.navigationBar setShadowImage:[[UINavigationBar appearance] shadowImage]];
}

@end

अब, आप श्रेणी को अपने में आयात कर सकते हैं UIViewControllerऔर अपने नेविगेशन नियंत्रक पर विधियों को कॉल कर सकते हैं - उदाहरण के लिए:

#import "UINavigationController+TransparentNavigationController.h"

- (void)viewWillAppear:(BOOL)animated
{
  [super viewWillAppear:animated];
  [self.navigationController presentTransparentNavigationBar];
}

- (void)viewWillDisappear:(BOOL)animated
{
  [super viewWillDisappear:animated];
  [self.navigationController hideTransparentNavigationBar];
}

और स्विफ्ट में एक समान समाधान :

import Foundation
import UIKit

extension UINavigationController {

  public func presentTransparentNavigationBar() {
    navigationBar.setBackgroundImage(UIImage(), forBarMetrics:UIBarMetrics.Default)
    navigationBar.translucent = true
    navigationBar.shadowImage = UIImage()
    setNavigationBarHidden(false, animated:true)
  }

  public func hideTransparentNavigationBar() {
    setNavigationBarHidden(true, animated:false)
    navigationBar.setBackgroundImage(UINavigationBar.appearance().backgroundImageForBarMetrics(UIBarMetrics.Default), forBarMetrics:UIBarMetrics.Default)
    navigationBar.translucent = UINavigationBar.appearance().translucent
    navigationBar.shadowImage = UINavigationBar.appearance().shadowImage
  }
}

मैं इसे फिर से कैसे दिखा सकता हूं (उदाहरण के लिए यदि बीमार इसे केवल नेविगेशन व्यू में केवल 1 दृश्य में पारदर्शी बनाना चाहता है?) - क्या मैं इसे अपने डिफ़ॉल्ट मूल्यों पर रीसेट कर सकता हूं?
derdida

hideTransparentNavigationBar()इसे वापस रीसेट करना चाहिए।
ज़ोरायार

ViewWillAppear / गायब में मौजूद / छिपाने के तरीकों को कॉल करने से दो भिन्न नेविगेशन बार के बीच एक खराब संक्रमण एनीमेशन पैदा होता है! आप इसे बहुत अच्छे से स्वाइप जेस्चर (बाएं से दाएं से) धक्का
मुक्की

इसे viewDidHideपैरेंट व्यू कंट्रोलर को कॉल करने का प्रयास करें ।
ज़ोरयार

1
पारदर्शी नेवबार को छिपाते समय लार्जटाइट का उपयोग करते समय iOS 11 पर काली पृष्ठभूमि दिखाई गई है
वृतिन राठौड़

15

एलन एक लाइन भूल गया

self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];

तो मेरे पास है:

[self.navigationController.navigationBar setTranslucent:YES];
self.navigationController.view.backgroundColor = [UIColor clearColor];
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];

5

@ ज़ोएयर के शानदार जवाब ने स्विफ्ट 3 को संशोधित किया:

import Foundation
import UIKit

extension UINavigationController {

    public func presentTransparentNavigationBar() {
        navigationBar.setBackgroundImage(UIImage(), for:.default)
        navigationBar.isTranslucent = true
        navigationBar.shadowImage = UIImage()
        setNavigationBarHidden(false, animated:true)
    }

    public func hideTransparentNavigationBar() {
        setNavigationBarHidden(true, animated:false)
        navigationBar.setBackgroundImage(UINavigationBar.appearance().backgroundImage(for: UIBarMetrics.default), for:.default)
        navigationBar.isTranslucent = UINavigationBar.appearance().isTranslucent
        navigationBar.shadowImage = UINavigationBar.appearance().shadowImage
    }
}

2

स्विफ्ट 4.2 और आईओएस 12

यह पता चला है कि आपको वास्तव में नीचे दिए गए कोड की आवश्यकता है। यह पूरी तरह से काम करता है जब आप इसे डालते हैं viewDidLoad()

// removes line at bottom of navigation bar
navigationController?.navigationBar.shadowImage = UIImage()

// makes navigation bar completely transparent
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.isTranslucent = true


-4

[(UIView *) [self.navigationController.navigationBar.subviews objectAtIndex: 0] setAlpha: 0.0f];

वह एक लाइन मेरे लिए पूरी तरह से काम करने लगती थी

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