2015-01-03 31 views
6

Ben çok garip bir davranışa sahip sonra görüntülenen tutar:Durum çubuğu sonra modal görünümü görevden gizli ve bazı saniye

ben navigasyon kontrolörü (gezinti çubuğu) sahip bir uygulama var durum çubuğu görünür. O zaman durum çubuğunu gizlemek istediğiniz modally bir görünüm denetleyicisi (kamera kullanarak barkod tarayıcı) sunmak, bu yüzden hayata:

override func prefersStatusBarHidden() -> Bool { 
    return true 
} 

Ben

self.dismissViewControllerAnimated(true, completion: nil) 

kullanarak modal olarak sunulan görünümü kapattığınızda görünümü kaybolur ve durum çubuğu rootviewcontroller

override func prefersStatusBarHidden() -> Bool { 
    return false 
} 

uygulayan rağmen, gizli tutar Ancak bazı saniye sonra Durum çubuğu otomatik olarak görünür !?

UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Fade) 
self.dismissViewControllerAnimated(true, completion: nil) 

Ama bu benim için bir şey değişmiş değil:

denedim StackOverflow burada çözüm.

Belki de viewDidAppear'daki kök görünümde bir yenileme yapabilir miyim?

+1

sen setNeedsStatusBarAppearanceUpdate 'baktı mı '? – jrturton

+0

Hey kardeşim, bende aynı sorun var ve durum çubuğunun görünmesini zorlamak için tüm işlevleri denedim. Sonunda buna bir çözüm buldunuz mu? –

+0

Ne yazık ki :( –

cevap

2

Muhtemelen görünüm denetleyicisinde setNeedsStatusBarAppearanceUpdate çağırmanız gerekir:

Çağrı bu yöntem eğer böyle gizli/unhidden durumu veya stil, değişiklik olarak görünümü kontrolörün durum çubuğu nitelikleri,. Bir animasyon bloğu içinde bu yöntemi çağırırsanız, değişiklikler animasyon bloğunun geri kalanıyla birlikte canlandırılır.

Genellikle, bu viewDidLoad yapılır, ancak sizin durumunuzda sizin bakış zaten yüklenmiş beri viewDidAppear bunu yapmak için daha iyi olacaktır ve görünümü hiyerarşi altındaki bir görünüm dışlıyor. Bu deneyin:

override func viewDidAppear(animated: Bool) { 
    self.setNeedsStatusBarAppearanceUpdate() 
} 
+2

Ne yazık ki bu benim sorunumu çözmedi :( –

8

muhtemelen bir arka plan iş parçacığı dismissViewControllerAnimated diyorsun?

geri böyle ana kuyruğuna bir OBEB çağrısında (o evreli olmadığı için ve UIKit için başka çağrılar) çağrısı sarma deneyin Eğer öyleyse:

dispatch_async(dispatch_get_main_queue()) { 
self.dismissViewControllerAnimated(true, completion: nil) 
} 
+0

Swift 3 DispatchQueue.main.async –

İlgili konular