şeffaf gezinme çubuğu ios


121

Bir uygulama oluşturuyorum ve internete göz attım ve bu şeffaf navigasyon çubuğunu nasıl yaptıklarını merak ediyorum:

görüntü açıklamasını buraya girin

Appdelegate'ime aşağıdakileri ekledim:

UINavigationBar.appearance().translucent = true

ancak bu sadece aşağıdaki gibi görünmesini sağlar:

görüntü açıklamasını buraya girin

Navigasyon çubuğunu ilk resim gibi nasıl şeffaf yapabilirim


Kodla bilmiyorum, ancak CSS konusunda iyiyseniz, bir çerçeve (Pixate: freestyle.org ) kullanabilir ve navbarınıza bir CSS stili uygulayabilirsiniz :)!
Nicolas Charvoz

Yanıtlar:


286

Yarı Saydam için aşağıdaki gibi Gezinme Çubuğu Görüntüsünü uygulayabilirsiniz.

Objective-C:

[self.navigationController.navigationBar setBackgroundImage:[UIImage new]
                     forBarMetrics:UIBarMetricsDefault]; //UIImageNamed:@"transparent.png"
self.navigationController.navigationBar.shadowImage = [UIImage new];////UIImageNamed:@"transparent.png"
self.navigationController.navigationBar.translucent = YES;
self.navigationController.view.backgroundColor = [UIColor clearColor];

Swift 3:

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) //UIImage.init(named: "transparent.png")
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
self.navigationController?.view.backgroundColor = .clear

Umarım size yardımcı olur ..!


4
BackgroundImage'ı ayarladığımda barTintColor'u kaldırıyor mu?
Peter Pik

Gezinme çubuğunun görüntüsünü alabilirsiniz..İhtiyacınıza göre..ve yukarıdaki gibi gezinme çubuğuna uygulayabilirsiniz .. (Gezinme çubuğuna uygulamak istediğiniz görüntü)
Vidhyanand

1
Navigasyon
Kontrolörünün

4
Bu çözümle siyah bir navigasyon çubuğu alıyorum, herhangi bir fikriniz var mı?
Carlos del Blanco

1
Beklenildiği gibi değil. Bunu yaptığınızda, duvarın sağda 0,7 alfa ile olduğu gibi yarı şeffaf olmayacak, PLUS durum çubuğunu da kaplayacak. Bunu iOS 13'te yaparsanız, sadece güzel ve güzel görünümlü bir dikdörtgene sahip olacaksınız, onun üzerinde THE STATUS BAR CRYSTAL CLEAR. ki sorunun yazarı açık ve spesifiktir.
Marlhex

122

Hızlı Çözüm

Bulduğum en iyi yol bu. Bunu appDelegate'inizin didFinishLaunchingWithOptions yöntemine yapıştırabilirsiniz :

Hızlı 3/4

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    // Sets background to a blank/empty image
    UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
    // Sets shadow (line below the bar) to a blank image
    UINavigationBar.appearance().shadowImage = UIImage()
    // Sets the translucent background color
    UINavigationBar.appearance().backgroundColor = .clear
    // Set translucent. (Default value is already true, so this can be removed if desired.)
    UINavigationBar.appearance().isTranslucent = true
    return true
}

Swift 2.0

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    // Sets background to a blank/empty image
    UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics: .Default)
    // Sets shadow (line below the bar) to a blank image
    UINavigationBar.appearance().shadowImage = UIImage()
    // Sets the translucent background color
    UINavigationBar.appearance().backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
    // Set translucent. (Default value is already true, so this can be removed if desired.)
    UINavigationBar.appearance().translucent = true

    return true
}

kaynak: iOS 8.1'de aşağıdaki görüntüye göre gezinme çubuğunu şeffaf yapın


4
Swift 3 çözümünüz, çubuğumu tamamen beyazlaştırıyor.
Jose Ramirez

@JozemiteApps yepyeni bir Xcode projesi yapmayı deneyin ve kodu yapıştırın. Yukarıdaki kodum mu yoksa projenizle ilgili buna neden olan bir şey mi onaylamak yalnızca 3 dakika sürecektir.
Dan Beaulieu

2
Ayrıca sade beyaz bir navibarım var ve şeffaf bir navibarım yok
Kingalione

Bu harika çalışıyor, teşekkürler! İstenen ViewController üzerindeki gezinme çubuklarının yalnızca şeffaf olmasını sağlayacak şekilde bunu nasıl uygulayabileceğinizi biliyor musunuz?
RufusV

@JoseRamirez Muhtemelen gördüğünüz viewController'ın arka planı. Güvenli alan veya kenar boşluğu ile değil, denetimli görünümle hizalamak için ilk görünümün üst sınırlamasını değiştirmeniz gerekir.
turingtest

27

Swift 5 yalnızca mevcut görünüm denetleyicisine uygulanıyor

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // Make the navigation bar background clear
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    navigationController?.navigationBar.shadowImage = UIImage()
    navigationController?.navigationBar.isTranslucent = true
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    // Restore the navigation bar to default
    navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
    navigationController?.navigationBar.shadowImage = nil
}

13

Swift 3: Şeffaf Gezinme Çubuğu için uzantı

extension UINavigationBar {
    func transparentNavigationBar() {
    self.setBackgroundImage(UIImage(), for: .default)
    self.shadowImage = UIImage()
    self.isTranslucent = true
    }
}

12

Swift 4.2 Çözümü: Şeffaf Arka Plan için:

  1. Genel Yaklaşım İçin:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.isTranslucent = true
    
    }
  2. Belirli Nesne için:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        navBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
        navBar.shadowImage = UIImage()
        navBar.navigationBar.isTranslucent = true
    
    }

Umarım yararlıdır.


Hangi nesneden bahsediyorsun navBar?
Sergey Gamayunov

@SergeyGamayunov navBarburada, UINavigationBar nesnesine başvurur.
Ümañg ßürmån

Demek istediği buydu ... let navBar = self.navigationController? .NavigationBar
Marlhex

8

Bunu şu şekilde hızlı bir şekilde başardım:

let navBarAppearance = UINavigationBar.appearance()
let colorImage = UIImage.imageFromColor(UIColor.morselPink(), frame: CGRectMake(0, 0, 340, 64))
navBarAppearance.setBackgroundImage(colorImage, forBarMetrics: .Default)

bir UIColorkategoride aşağıdaki yardımcı program yöntemini oluşturdum :

imageFromColor(color: UIColor, frame: CGRect) -> UIImage {
  UIGraphicsBeginImageContextWithOptions(frame.size, false, 0)
  color.setFill()
  UIRectFill(frame)
  let image = UIGraphicsGetImageFromCurrentImageContext()
  UIGraphicsEndImageContext()
  return image
}

Bu en iyi cevap olmalı!
Mihail Salari

7

Benim için ne işe yaradı:

    let bar:UINavigationBar! =  self.navigationController?.navigationBar
    self.title = "Whatever..."
    bar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
    bar.shadowImage = UIImage()
    bar.alpha = 0.0 

5

NavigationBar'ınızın arka plan özelliğini ayarlayın, örn.

navigationController?.navigationBar.backgroundColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 0.5)

(Gezinme denetleyiciniz yoksa bunu biraz değiştirmeniz gerekebilir, ancak bu size ne yapmanız gerektiği konusunda bir fikir verecektir.)

Ayrıca, aşağıdaki görünümün aslında çubuğun altına uzandığından emin olun.


Bu bana şunu veriyor: i.stack.imgur.com/GT3WV.png Gönderdiğim ilk bağlantı (resim) gibi nasıl biraz daha kırmızı yapabilirim
Peter Pik

Alfa değeri ile oynayabilir ve 0,5'ten 0,0 ile 1,0 arasında herhangi bir değere değiştirebilirsiniz. Ve dediğim gibi, aşağıdaki görüntünün gezinme çubuğunun altına geldiğinden emin olun, aksi takdirde çubukta herhangi bir içerik parlamasını görmezsiniz. Arayüz Oluşturucu kullanıyorsanız, o görünümün üst kenarını ekranın üst kenarına sürükleyip hizalayabilirsiniz.
Atomix

2

Bunu deneyin, ios7'yi de desteklemeniz gerekiyorsa benim için işe yarıyor, UItoolBar'ın şeffaflığına dayanıyor:

[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];
    UIToolbar* blurredView = [[UIToolbar alloc] initWithFrame:self.navigationController.navigationBar.bounds];
    [blurredView setBarStyle:UIBarStyleBlack];
    [blurredView setBarTintColor:[UIColor redColor]];
    [self.navigationController.navigationBar insertSubview:blurredView atIndex:0];

2

OBJC çözümü arayanlar için, App Delegate didFinishLaunchingWithOptions yöntemine eklenecek:

[[UINavigationBar appearance] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[UINavigationBar appearance].shadowImage = [UIImage new];
[UINavigationBar appearance].backgroundColor = [UIColor clearColor];
[UINavigationBar appearance].translucent = YES;

1

Bunu aynı görüntüde kalarak hızlı 4'te programlı olarak yapabilmek istiyorsanız,

if change {
        navigationController?.navigationBar.isTranslucent = false
        self.navigationController?.navigationBar.backgroundColor = UIColor(displayP3Red: 255/255, green: 206/255, blue: 24/255, alpha: 1)
        navigationController?.navigationBar.barTintColor = UIColor(displayP3Red: 255/255, green: 206/255, blue: 24/255, alpha: 1)
    } else {
        navigationController?.navigationBar.isTranslucent = true
        navigationController?.navigationBar.setBackgroundImage(backgroundImage, for: .default)
        navigationController?.navigationBar.backgroundColor = .clear
        navigationController?.navigationBar.barTintColor = .clear
    }

Yine de hatırlanması gereken önemli bir şey, film şeridinizdeki bu düğmeye tıklamaktır. Uzun zamandır atlama ekranıyla ilgili bir sorun yaşadım. Bunu ayarladığınızdan emin olun:görüntü açıklamasını buraya girin

Gezinme çubuğunun yarı saydamlığını değiştirdiğinizde, gezinme çubuğunun görünürlüğünden bağımsız olarak görünümler en üste kadar uzandığı için görünümlerin atlamasına neden olmaz.


1

Bunu did yüküne ekle

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0.0)
//adjust alpha according to your need 0 is transparent 1 is solid

0

NavigationController'ı ve navigasyon çubuğunda ayarlamak istediğiniz rengi geçerek çağırdığınız yardımcı program yöntemi. İçin şeffaf kullanabilirsiniz clearColorait UIColorsınıfına.

Hedef c için -

+ (void)setNavigationBarColor:(UINavigationController *)navigationController 
                               color:(UIColor*) color {
   [navigationController setNavigationBarHidden:false animated:false];
   [navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
   [navigationController.navigationBar setShadowImage:[UIImage new]];
   [navigationController.navigationBar setTranslucent:true];
   [navigationController.view setBackgroundColor:color];
   [navigationController.navigationBar setBackgroundColor:color];
}

Swift 3.0 için -

class func setNavigationBarColor(navigationController : UINavigationController?, 
                                 color : UIColor) {
    navigationController?.setNavigationBarHidden(false, animated: false)
    navigationController?.navigationBar .setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
    navigationController?.navigationBar.shadowImage = UIImage()
    navigationController?.navigationBar.translucent = true
    navigationController?.view.backgroundColor = color
    navigationController?.navigationBar.backgroundColor =  color
}

0

Bunun üzerinde çalışıyordum ve burada farklı kullanıcılar tarafından sağlanan yanıtları kullanırken bir sorunla karşılaşıyordum. Sorun, iOS 13+ üzerinde NavigationBar şeffaf resmimin arkasındaki beyaz kutuydu

görüntü açıklamasını buraya girin

Benim çözümüm bu

if #available(iOS 13, *) {
    navBar?.standardAppearance.backgroundColor = UIColor.clear
    navBar?.standardAppearance.backgroundEffect = nil
    navBar?.standardAppearance.shadowImage = UIImage()
    navBar?.standardAppearance.shadowColor = .clear
    navBar?.standardAppearance.backgroundImage = UIImage()
}

Umarım bu aynı sorunu olan herkese yardımcı olur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.