İOS8'de Swift kullanarak belirli ViewControllers için Durum Çubuğu Rengini Değiştirme


192
override func preferredStatusBarStyle() -> UIStatusBarStyle {
 return UIStatusBarStyle.LightContent;
}

Herhangi bir ViewController'da yukarıdaki kodu kullanmak, belirli bir viewcontroller için statusBar rengini Beyaz olarak ayarlamak için iOS8'de benim için çalışmıyor . Baska öneri? UIApplication.sharedApplication yöntemini kullanarak, uygulamanın tamamı için Info.plist'te gerekli değişikliklerden sonra renk değişir.

// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent

Bazı gerekli ve belirli ViewController'lar için durum çubuğu renginde nasıl değişiklik yapabilirim ?

Yanıtlar:


350

Tüm önerileri okuduktan ve birkaç şey denedikten sonra, aşağıdaki adımları kullanarak belirli görünüm denetleyicileri için çalışabilirim:

İlk adım:

Senin info.plist açın ve "adında yeni bir anahtar eklemek Görünüm denetketiyicili durum çubuğu görünümü için" NO

İkinci Adım (Sadece bir açıklama, bunu uygulamaya gerek yok):

Normalde AppDelegate uygulamasının (_: didFinishLaunchingWithOptions :) yöntemine aşağıdaki kodu koyarız,

Hızlı 2

UIApplication.sharedApplication().statusBarStyle = .LightContent

Hızlı 3

UIApplication.shared.statusBarStyle = .lightContent

ancak bu tüm ViewControllers öğelerini etkiler statusBarStyle.

Peki, bunu belirli ViewControllers için nasıl çalıştırabilirsiniz - Son Adım:

Değiştirmek istediğiniz viewcontroller dosyasını açın ve statusBarStyleaşağıdaki kodu viewWillAppear(),

Hızlı 2

UIApplication.sharedApplication().statusBarStyle = .LightContent

Hızlı 3

UIApplication.shared.statusBarStyle = .lightContent

Ayrıca, ilgili viewWillDisappear()viewController için yöntemi uygulayın ve aşağıdaki kod satırlarını ekleyin,

Hızlı 2

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default

}

Hızlı 3

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}

Bu adım önce statusBarStylebelirli bir görünüm denetleyicisi için değiştirilecek ve daha sonra defaultbelirli bir görünüm denetleyicisi yok olduğu zamana geri dönecektir . Uygulanmaması viewWillDisappear()değişecek statusBarStyleyeni tanımlanan değere kalıcıUIStatusBarStyle.LightContent


4
Status bar is initially hidden = YESİnfo.plist dosyasında ayarlarsanız , "Denetleyici tabanlı durum çubuğu görünümünü görüntüle = HAYIR" durum çubuğunun gizlenmesine neden olacağını unutmayın.
xi.lin

13
UIStatusBarStyle.DefaultKullanmaya geri dönüyorsanız, .... yerine değil, başlatmak viewWillDisappear()için kullanmalısınız viewWillAppear(). viewDidLoad()Aksi takdirde yeniden yüklemeye gerek kalmadan o görünüme geri StatusBarStyledönerseniz, beklediğinizi görmezsiniz .
William GP

7
Swift 3 için: UIApplication.shared.statusBarStyle = .lightContent
ibrahimyilmaz

4
Durum çubuğunun rengini nasıl değiştirdiğiniz hala belli değil
DoruChidean

4
Guys, iOS 9'dan kullanımdan kaldırıldı
byJeevan

109

(20 Eylül 2019 itibarıyla)

Swift 5 , Swift 4.2 , Swift 4

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
    .lightContent
}

7
super.viewWillAppearBu kodu kopyalayıp yapıştırıyorsanız mutlaka arayın
Stephen Silber

Super.viewWillAppear () dahil etmek üzere düzenlendi. Bahşiş için @StephenSilber teşekkürler!
BennyTheNerd

preferStatusStyle'ı geçersiz kılmanız gerekir, aksi takdirde çalışmaz. işaret ettiğin için teşekkürler. +1
Alix

3
UIApplication.shared.statusBarStyle = .lightContentBu derleyici uyarısında sonuçları kullanma : iOS 9.0'da 'statusBarStyle' için ayarlayıcı kullanımdan kaldırıldı: Kullanım - [UIViewController
preferStatusBarStyle

3
Uygulamanızın Info.plist uygulamasında, "Denetleyici tabanlı durum çubuğu görünümünü görüntüle" seçeneğini EVET
IvanPavliuk

30

NavigationController ile Swift 4.2 çözümü

İlk adım:

Senin info.plist açın ve "adında yeni bir anahtar eklemek Görünüm denetketiyicili durum çubuğu görünümü " veya UIViewControllerBasedStatusBarAppearancehiç EVET her VC kendi statü özelliğini kullanmasına izin.

İkinci adım

Her VC'de, tercih edilenStatusBarStyle özelliğini şu şekilde geçersiz kılın :

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent //.default for black style
}

Son adım

Tercih edilen statüsüBarStyle'ı geçersiz kılÖzel NavigationController sınıfınızdaki özelliğini :

class NavigationController : UINavigationController {

override var preferredStatusBarStyle : UIStatusBarStyle {

    if let topVC = viewControllers.last {
        //return the status property of each VC, look at step 2
        return topVC.preferredStatusBarStyle  
    }

    return .default
}

Bu, yalnızca Gezinti Denetleyicisini ve kendi denetleyicilerinizi kullanarak beklenen sonuca ulaşmanın yoludur. Ben :) Projem için yaptığı gibi Ayrıca prefersStatusBarHidden için bu şekilde yapabileceğini
atereshkov

29

Bu öğreticiyi takip ettim ve benim için çalıştı. Ancak, herhangi bir uyarı olup olmadığından emin değilim.

https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift

  • Senin info.plist ve set açın UIViewControllerBasedStatusBarAppearanceetmek false.
  • AppDelegate.swiftİçerdiği ilk işlevde , didFinishLaunchingWithOptionsistediğiniz rengi ayarlayın.

UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent

  • Swift 3 Güncellemesi *

    UIApplication.shared.statusBarStyle = .lightContent


11
bu her görüş kontrolörüne özgü
Yarneo

4
Tam olarak, bu tam bir uygulama için ve bu soru değil.
Anuj

3
İOS 8 Swift ve xCode 6.1.1 kullanıyorum ve sadece bu iki adımı izlemek işe yaramıyor. Ayrıca UIApplication.sharedApplication().statusBarHidden = falseAppDelegate.swift'e de eklemeniz gerekiyorFinishLauchingWithOptions
Ahmad Amin

Bu, tüm uygulama için ayarlayın. Belirli görünüm denetleyicileri için ilk cevaba bakın. Benim için çalıştı.
Akshar Patel

'StatusBarStyle' için ayarlayıcı iOS 9.0'da kullanımdan kaldırıldı: Kullan - [UIViewController preferStatusBarStyle]
Oleksandr

22

Burada bir milyar cevap var, bu yüzden neden bir uzantı şeklinde başka bir tane eklemeyeceğinizi düşündüm (@ Cœur'un yardımıyla)

Hızlı 3

Uzantı:

extension UIApplication {
    class var statusBarBackgroundColor: UIColor? {
        get {
            return (shared.value(forKey: "statusBar") as? UIView)?.backgroundColor
        } set {
            (shared.value(forKey: "statusBar") as? UIView)?.backgroundColor = newValue
        }
    }
}

Uygulama:

UIApplication.statusBarBackgroundColor = .blue

2
Bu yaklaşımın özel bir API'ya erişilebileceğini ve uygulamanızın Apple tarafından reddedileceği anlamına gelebileceğini lütfen unutmayın.
JWhitey

Ya da en azından Apple'ın uygulama ayrıntılarına bağlıdır ve iOS'taki değişikliklerle uyarı vermeden kırılabilir.
Chris Prince

19

Info.plist'inizde Denetleyici tabanlı durum çubuğu görünümünü herhangi bir değere göre tanımlamanız gerekir.

Bunu EVET olarak tanımlarsanız, her görünüm denetleyicisinde tercih edilen durumBarStyle işlevini geçersiz kılmanız gerekir.

HAYIR olarak tanımlarsanız AppDelegate'te stili kullanarak

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)

7
setStatusBarStyle9.0'da kullanımdan kaldırıldı
Jeffrey Neo

@Jeffrey_Neo Her ne kadar bu doğru olsa da yedek yerine çalışamıyor. Yorumunuzu çalışma koduna bir cevap olarak görmek yararlı olacaktır.
dumbledad

15
override func viewWillAppear(animated: Bool) {
    self.navigationController?.navigationBarHidden =  true

    UIApplication.sharedApplication().statusBarHidden = false
    UIApplication.sharedApplication().statusBarStyle = .LightContent

    let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
    if statusBar.respondsToSelector("setBackgroundColor:") {
        statusBar.backgroundColor = UIColor.redColor()
    }

}

kullanımı valueForKey("statusBar")Apple yönergelerine uygun olmayabilir
Cœur

15

Hızlı 3

let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to: #selector(setter: UIView.backgroundColor)) {
  statusBar.backgroundColor = UIColor.black
} 

Bu, belirli görünüm denetleyicisi için durum çubuğunun arka plan rengini ayarlamak için bir çözümdür.


3
UIView, Swift'teki backgroundColor'a her zaman yanıt verir.
Coeur

13

SWIFT 2

Benim durumumda aşağıdakileri ekleyerek durum çubuğu arka planının görünümünü başarıyla değiştirebildim:

let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView

    if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
        statusBar.backgroundColor = .redColor()
    }

10

Uygulamak preferredStatusBarStyleçağrı zikredildiği gibi self.setNeedsStatusBarAppearanceUpdate()içinde ViewDidLoadhem de Info.plist setinde UIViewControllerBasedStatusBarAppearanceiçin YES(It YESvarsayılan olarak)

Neden çalışmadığı açık değil.Kodu kontrol etmem gerekiyor.Başka bir öneri de çalışma kodu ile gitmek viewDidLoad UIApplication.sharedApplication().statusBarStyle = .LightContentve kaybolduğunuzda görüntülediğinizde bunu varsayılan olarak değiştirmek viewWillDisappear.


Sadece cevabın ilk kısmını uygulamak benim için çalıştı. Ancak, Info.plist UIViewcontrollerBasedStatusBarAppearance eklemedim. Hala çalıştı.
Akshar Patel

10

hızlı 3 için

.plist

View controller-based status bar appearance = NO

AppDelegate.swift

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Custom statubar
        UIApplication.shared.isStatusBarHidden = false
        UIApplication.shared.statusBarStyle = .lightContent
        let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
        statusBar.backgroundColor = UIColor.gray

        return true
    }

1
Tüm çözümleri denedim ... bu sadece benim için çalıştı! Neden bilmiyorum: D
Khaled Hayek

berabere şans
Giang

İOS 9.0'da 'isStatusBarHidden' için ayarlayıcı kullanımdan kaldırıldı: Kullanım - [UIViewController tercih ediyorStatusBarHidden] ...
çekti ..

9

Benim durumumda, görünüm denetleyicileri düzenlemek için film şeridi kullanıyorum.Tüm durum çubuğu stilini değiştirmek istiyorum.

Aşağıdaki resimde görebilirsiniz.

resim açıklamasını buraya girin

StarsView Controller bir CPBaseNavigationControllerve CPBaseNavigationControlleralt sınıfıdır UINavigationController.

Sonraki ayarları yapmayı deniyorum:

  1. In AppDelegate.swiftfunc didFinishLaunchingWithOptionseklemek

    //change status bar color
    UIApplication.sharedApplication().statusBarHidden = false
    UIApplication.sharedApplication().statusBarStyle = .LightContent

    ama etkisi yok.

  2. Film Şeridi 'nde, bulmak Base Tab BarController.Select (yukarıdaki görüntüyü) Attributes Inspector, değiştirmek Sattus Bariçin özellik Light Content.bu bad, hiçbir etkisi.

resim açıklamasını buraya girin

  1. Son anladım.Özel navigasyon denetleyicime CPBaseNavigationControllerfunc eklepreferredStatusBarStyle

    override func preferredStatusBarStyle() -> UIStatusBarStyle {
       return .LightContent
    }

    İyi çalışıyor!

Ayrıca statusBarStyle9.0'da kullanımdan kaldırılmış olarak kullanabilirsiniz -[UIViewController preferredStatusBarStyle].


9

Navigasyon Tabanlı Uygulama Çalışmaları

    var addStatusBar = UIView()
    addStatusBar.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 20);
    addStatusBar.backgroundColor = global().UIColorFromRGB(0x65b4d9)
    self.window?.rootViewController?.view .addSubview(addStatusBar)

Bu özel kodu nereye ekleyebilirim, sadece işe yaramadı.
Anuj

U bunu didFinishLaunchingWithOptions App
Jele

1
Sabit kodlu 320 genişlik yerine addStatusBar.frame = CGRectMake (0, 0, UIScreen.mainScreen (). Bounds.width, 20) kullanmak daha iyi olmaz mıydı?
Torsten Ojaperv

Düzenlenen @TorstenOjaperv
Jio

Hızlı 3.0 ile nasıl yapılır?
YETI

8

Swift 3.0 Xcode 8'de her şey çok daha kolay

App Delegate dosyasında aşağıdaki kodu kullanarak,

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

bunu ekle:

UINavigationBar.appearance().barStyle = .black

UINavigationBar.appearance().barTintColor = UIColor(red: 230, green: 32, blue: 31, alpha: 1.0)

1
Kırmızı, yeşil ve mavi değerler 0 ile 1 arasındadır. Bunları 255'e bölmeniz gerekir, aksi takdirde çalışmaz.
Makalele

8

Hızlı 3

//
//  LoginController.swift
//  Swift 3
//
//  Created by The Crab on 17/01/2017.
//  Copyright © 2017 Paxi Labs. All rights reserved.
//

import UIKit

class LoginController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        setNeedsStatusBarAppearanceUpdate()

        view.backgroundColor = UIColor(red: 61/255, green: 91/255, blue: 151/255, alpha: 1)

    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

7

Swift 4 NavigationViewController gömülü olmayan belirli ViewController için bunu yalnızca ViewController dosyanıza ekleyin.

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent
}

Yerleşik bir navigasyon denetleyicimiz varsa ne yaparsınız?
icekomo

7

Bu işi yapmanın bir başka gerçekten kolay yolu, sadece UINavigationController sınıfının bir uzantısını oluşturmaktır.

Geçersiz kılma yana preferredStatusBarStyle:yöntem alışkanlık çalışmalarını SÜRECE biz UINavigationController sınıfının içine bunu.

    extension UINavigationController {
        open override var preferredStatusBarStyle: UIStatusBarStyle {
            return .lightContent
        }
    }

4

App DelegateDosyada aşağıdaki kodu kullanarak belirli bir renk (RGB formatında) ayarlamıştım :

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
. . .

 UIApplication.sharedApplication().statusBarHidden = false
        UIApplication.sharedApplication().statusBarStyle = .LightContent

        let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
        if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
            statusBar.backgroundColor = UIColor.init(red: 0.1, green: 0.27, blue: 0.60, alpha: 1.0)
        }

. . .
}

Ayrıca aşağıdaki anahtarı da eklemeniz gerekir Info.plistDosyaya :

Boole değeri NO olarak ayarlanmış denetleyici tabanlı durum çubuğu görünümünü görüntüleme

Ekran görüntüsü 1

Ekran görüntüsü 2


Siwft 3.0 ile nasıl yapılır?
YETI

4

Size daha basit bir yol önerebilirim,

  1. Apple belgelerinin dediği gibi setNeedsStatusBarAppearanceUpdate viewDidLoad'ı arayın ,

Görünüm denetleyicisinin gizli / gizli durum veya stil gibi durum çubuğu özellikleri değişirse bu yöntemi çağırın. Bu yöntemi bir animasyon bloğu içinde çağırırsanız, değişiklikler animasyon bloğunun geri kalanıyla birlikte canlandırılır.

  1. Tercih ettiğiniz türü döndürerek tercih edilen durumBarStyle'ı uygulayın .

İOS 10.1'de benim için çalıştı.

Hedef C

[self setNeedsStatusBarAppearanceUpdate];

-(UIStatusBarStyle)preferredStatusBarStyle {
     return UIStatusBarStyleLightContent;
}

hızlı

setNeedsStatusBarAppearanceUpdate()

var preferredStatusBarStyle: UIStatusBarStyle { 
    return .lightContent
}

Kimsenin bunu işaret etmesine şaşırdım. Neyse tadını çıkarın :)


4

Bu konuda biraz sorun yaşadım. Durum çubuğunun rengini genel olarak değiştirmede görünüşte gerçekten iyi hissetmedim ve sonra tekrar görünümde değiştirmek kabul edilen cevap gibi ortadan kayboldu. İster inanın ister inanmayın preferredStatusBarStyle, istediğiniz görünüm denetleyicisini geçersiz kılarak bu çalışmayı elde edebilirsiniz . Çok zaman sonra bu işe almak için yaptım:

  1. Görünümünüzdeki denetleyici tabanlı durum çubuğu görünümünü info.plistEVET olarak değiştirin.
  2. Artık herhangi bir tam ekran görünümü denetleyicisi, durum çubuğu stilini geçersiz kılarak değiştirebilir preferredStatusBarStyle.
  3. Tam ekranı modal​Presentation​Captures​Status​Bar​Appearancebelirtiyorum çünkü bu, (tam ekran olmayan) mod görüntüleme denetleyicileri için çalışmaz , Evet, Evet olarak ayarlanmaz .
  4. Ayrıca, örneğin bir gezinme denetleyicisinde olduğu gibi katıştırılmış görünüm denetleyicileriniz varsa, en üst görünüm denetleyicisinden durum çubuğu stili ister. child​View​Controller​For​Status​Bar​StyleKatıştırılmış görünüm denetleyicisini geçersiz kılmak ve geçmek işe yarayacaktı ama benim için olmadı. Bu yüzden, katıştırılmış görünüm denetleyicilerinin tercih edilen durum çubuğunu tercih edilen durum çubuğu stili olarak döndüm. Bunun gibi bir şey:

    override var preferredStatusBarStyle: UIStatusBarStyle {
         if let topViewController = viewControllers.last {
             return topViewController.preferredStatusBarStyle
         }
    
         return .default
    }

Bu cevap bana yardımcı oldu! Ben nedense benim gezinti kontrol (modally sunulmakta olan) olduğu tespit edilmemiştir örtük olarak durum çubuğu tarzı için en üstteki görünüm denetleyicisi soran. Bu yüzden orada dönen alt sınıf UINavigationControllerve geçersiz kılmak zorunda kaldı . child​View​Controller​For​Status​Bar​Styleself.topViewController
taber

3

Swift 4 veya 4.2'de

Vc'nize ekleyebilirsiniz

preferredStatusBarStyle

ve dönüş değerini

.lightContent veya .default

örn:

override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
}

3

(10 Haziran 2020 itibariyle)

Swift 5 ( Dosyayı düzenlemeden.Plist )

Kullanıyorsanız , seçeneğine Storyboardgidin NavigationController, öğesini seçin, navigationBarüzerine tıklayın ve Attributes Inspectorardından değiştirin style. ihtiyacınız varsa light content( beyaz durum çubuğu ) defaultdiyelim set stili diyelim dışında bir şey ayarlayın blackVe isterseniz dark content ( siyah durum çubuğu ) ayarlayın default.

Varsayılan ( UIBarStyleDefault), karanlık ön plan UIStatusBarStyleDefaultdurum çubuğuyla sonuçlanır . Ve UIBarStyleBlackbir UIStatusBarStyleLightContentdurum çubuğu verecektir .

programlama yoluyla

let nav = UINavigationController(rootViewController: rootViewController)

    nav.navigationBar.barStyle = .default //gives you dark Content status bar

    nav.navigationBar.barStyle = .black  //gives you light content status bar

Gezinme Çubuğu Olmadan ( Düzenle.Plist )

eklemek UIViewControllerBasedStatusBarAppearance/ View controller-based status bar appearanceadresinden Müşteri info.plistve set değeridir true.

OverridepreferredStatusBarStylesenin Kontrolör mülk

class ViewController: UIViewController {
    override var preferredStatusBarStyle : UIStatusBarStyle {
        return .lightContent
    }
}

2

Swift 3.0 Güncellemesi

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        UIApplication.shared.statusBarStyle = .lightContent

        return true
    }

2

Benimle çalışan şey, Storyboard'da Gezinti Denetleyicisine gidin, gezinme çubuğunu seçin, Özellikler Denetçisi'ne tıklayın, ardından stili varsayılandan siyaha değiştirin. Bu kadar!


2

SWIFT 4.2 Hey, Graig Grummitt'in bu kötü konuyla ilgili harika bir makaleden aldığım bir çözümü paylaşmak istedim.

Adım 1 Diğerlerinin de belirttiği gibi PLIST'inize EKLE

View controller-based status bar appearance YES

RootViewcontroller'daki 2. adım aşağıya ekleyin

var statusBarHidden: Bool = false {
        didSet(newValue) {
            UIView.animate(withDuration: 0.1) {
                self.setNeedsStatusBarAppearanceUpdate()
            }
        }
    }

    override var prefersStatusBarHidden: Bool {
        return statusBarHidden
    }

    var vcStatusBarStyle: UIStatusBarStyle = .default {
        didSet(newValue) {
            UIView.animate(withDuration: 0.1) {
                self.setNeedsStatusBarAppearanceUpdate()
            }
        }
    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return vcStatusbarStyle
    }

Özelliklerden birini güncellerken statusBarHiddenveya vcStatusBarStylebu özelliği çağırır setNeedsStatusBarAppearanceUpdate()ve durum çubuğunu yeni değerlerle ya prefersStatusBarHiddenda için günceller preferredStatusBarStyle. Benim durumumda, görülebilir childviewcontroller üst olan konteyner viewcontroller için bu özellikleri güncellemek zorunda kaldı. Bunu basit bir delege yöntemi kullanarak yaptım.

protocol MainViewControllerDelegate {
    func updateStatusBarStyle(statBarStayle: UIStatusBarStyle)
    func toggleStatusBar(visable: Bool)
}

Tabii childViewController'ı (Visible VC) başlatırken MainViewcontroller'ı (Container VC) delegesi olarak ayarlamayı unutmayın. Bazen yaparım. :)

childViewController.delegate = self

Daha sonra childViewController'da durum çubuğunu güncellemek için gerektiğinde temsilci yöntemini çağırdım.

self.delegate?.updateStatusBarStyle(statBarStayle: .default)

Yukarıda belirtildiği gibi Graig Grummitt, bu çözüm hakkında daha ayrıntılı bilgi ve UINavigationControllers ile de çalışmaktadır. Buradan bağlantı kurun: Durum Çubuğunun Gizemli Örneği


1

Destekleyici Dosyalar grubuna tıklayın (projenizin sol üst - adı). Bilgi'ye gidin. Paket adının altındaki gibi listeler arasında bir yeri + tıklayın. "Denetleyici tabanlı durum çubuğu görünümünü görüntüle" seçeneğini ekleyin ve NO olarak ayarlayın. Sonra AppDelegate.swift dosyasını açın ve şu şekilde değiştirin:

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)

return true
}

Bu kadar.


Soruyu yanlış okudunuz. Tüm uygulama için değil, belirli görünüm denetleyicileri için StatusBarStyle'ın nasıl değiştirileceğini sordum.
Anuj

Aşağıdaki cevabımı kontrol edin @Anuj
theCrab

1

Xcode 10 için bir sınıf oluşturabilir ve viewController sınıfınızdan önce koyabilirsiniz, bu sınıfı tüm görünüm denetleyicisinde hafif bir içerik durum çubuğuna ihtiyaç duyduğunuzda çağırabilirsiniz ...

class UIViewControllerWithLightStatusBar: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
}

Şimdi viewController sınıfınızı şu şekilde değiştirin:

class YourViewController: UIViewControllerWithLightStatusBar {
...
}

Ve hepsi bu...


1

Swift4'teki belirli görünüm denetleyicisi için Navigasyon Tabanlı Çalışır

   let app = UIApplication.shared
   let statusBarHeight: CGFloat = app.statusBarFrame.size.height

   let statusbarView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: statusBarHeight))
   statusbarView.backgroundColor = UIColor.red
   view.addSubview(statusbarView)

1

UYARI


İOS 9.0'da 'statusBarStyle' için ayarlayıcı kullanımdan kaldırıldı: Kullan - [UIViewController preferStatusBarStyle]

UIApplication.shared.statusBarStyle = .default

benim çözümüm şöyleydi: navigasyon denetleyicisinden bir uzantı yapmak:

extension UINavigationController {
    open override var preferredStatusBarStyle: UIStatusBarStyle {
        if let topViewController = presentedViewController{
            return topViewController.preferredStatusBarStyle
        }
        if let topViewController = viewControllers.last {
            return topViewController.preferredStatusBarStyle
        }

        return .default
    }
}

ve uygulamanın stilinden başka bir stile sahip olacak bir viewController'ınız varsa, bunu yapabilirsiniz

var barStyle = UIStatusBarStyle.lightContent
override var preferredStatusBarStyle: UIStatusBarStyle{
    return barStyle
}

diyelim ki uygulama durum stiliniz .defaultve bu ekranın .lightContent barStyle'ın .lightContentvarsayılan değeri olarak almasını istediğinizi varsayalım , bu durum çubuğu stilini lightContent olarak viewWillDisappeardeğiştirecek ve ardından barStyle'ı tekrar uygulama durum çubuğu stiline değiştirdiğinizden emin olun. bizim durumumuzda .default.

bu benim için çalışıyor


1

Durum çubuğu için özel renk (iOS11 +, Swift4 +)

Durum çubuğunu özel renginize nasıl değiştireceğinize ilişkin bir çözüm arıyorsanız, bu çalışma çözümü.

let statusBarView = UIView()
view.addSubview(statusBarView)
statusBarView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    statusBarView.topAnchor.constraint(equalTo: view.topAnchor),
    statusBarView.leftAnchor.constraint(equalTo: view.leftAnchor),
    statusBarView.rightAnchor.constraint(equalTo: view.rightAnchor),
    statusBarView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)
])
statusBarView.backgroundColor = .blue
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.