2016-02-02 32 views
11

私のアプリは暗いナビゲーションバーの色を使用しています。したがって、ステータスバーの色は白に設定されています(コントラストが良いので)。Safari View Controllerでステータスバーの色が正しく表示されない

red navigation bar with white status bar

私は(ステータスバーを白にするために)黒にbarStyleを設定し、また私の濃い赤色にbarTintを設定することによって、これをしませんでした。完璧に動作します。

私はこのようなSafariViewControllerを提示:提示SafariViewControllerのステータスバーはまだ白いですが

func openWebsite(urlString: String) { 
    if let url = NSURL(string: urlString) { 
     let svc = SFSafariViewController(URL: url) 
     svc.delegate = self 
     self.presentViewController(svc, animated: true, completion: nil) 
    } 
} 

SVCナビゲーションバーには、デフォルトの透明なiOSのデフォルトのスタイルがあるため、これは問題です。ステータスバーは基本的に見えません。

safari view controller with white status bar color

私はそれを解決することができますか?

答えて

0

あなたviewControllersでpreferredStatusBarStyleをオーバーライドして、あなたが

- (UIStatusBarStyle)preferredStatusBarStyle 
    { 
     return UIStatusBarStyleLightContent; 
    } 

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

またはあなたが

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 

UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None) 

どのようにこれまでsharedApplicaionあなたを通してそれを設定するために手動で設定することができますしたいものを返すことができる2つの方法があります。これをあなたのplistに追加する必要があります "コントローラーベースのステータスバーの外観を表示"にNO enter image description here

+0

ありがとうございます。私はこれをすべて知っています。 **自分のView Controller用のステータスバースタイルを設定すると、完璧に動作します**。しかし、私は 'Safari View Controller 'を正しいステータスバーのスタイルにする方法を知らない。これはAppleのクラスであり、私の直接の管理下ではありません。 – funkenstrahlen

+0

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];あなたのために働かないのですか?コールの前に追加しますか? –

+0

SVCを呼び出す前に 'UIApplication.sharedApplication()。statusBarStyle = UIStatusBarStyle.Default'を設定しても何も変更されません。これは、私のアプリが必要とするため、 'View Controller based status bar color'を' YES'に設定しているためです。 'Safari View Controller'の' preferredStatusBarStyle'は自分のクラスではないのでオーバーライドできません。 – funkenstrahlen

2

これは、サブクラス化されたUINavigationControllerを使用してSFSafariViewControllerをラップすることで実現できます。

BlackStatusBarNavigationController.h

@interface BlackStatusBarNavigationController : UINavigationController 
@end 

BlackStatusBarNavigationController.h

@interface BlackStatusBarNavigationController() 

@end 

@implementation BlackStatusBarNavigationController 

- (UIStatusBarStyle)preferredStatusBarStyle { 
    return UIStatusBarStyleDefault; 
} 

@end 

次のように使用します。

UINavigationController *navigationController = [[BlackStatusBarNavigationController alloc] initWithRootViewController:viewController]; 
navigationController.navigationBarHidden = YES; 

[self presentViewController:navigationController animated:YES completion:nil]; 
+0

承認済みのpreferredStatusBarStyleメソッドをサポートしている最善の答えと簡単な私はこれまでに見つかった! –

関連する問題