15

私のアプリは暗いナビゲーション バーの色を使用しています。そのため、ステータス バーの色を白に設定しました (コントラストが良いようにします)。

赤いナビゲーション バーと白いステータス バー

これを行うには、 barStyleを黒に設定し(ステータス バーを白にするため)、barTintを暗赤色に設定しました。完璧に動作します。

私は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)
    }
}

ただし、提示されたSafariViewController静止画のステータス バーは白です。これは、SVCナビゲーション バーが既定の白い透明な iOS の既定のスタイルを持っているため、問題です。したがって、ステータスバーは基本的に見えません。

ステータスバーの色が白のサファリビューコントローラー

どうすれば修正できますか?

4

3 に答える 3

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];
于 2016-05-20T14:47:42.233 に答える
0

iOS 13 以降でステータスバーの背景色を設定したい場合は、このように強制的に設定してみてください。

import UIKit
import SafariServices

class CustomSFSafariViewController: SFSafariViewController {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(true)

        if #available(iOS 13.0, *) {
            UIApplication.shared.statusBarView?.backgroundColor = .purple
        }

        setNeedsStatusBarAppearanceUpdate()
    }
}


extension UIApplication {
    @available(iOS 13.0, *)
    var statusBarView: UIView? {
        let tag = 3848245
        
        let keyWindow = connectedScenes
            .map({$0 as? UIWindowScene})
            .compactMap({$0})
            .first?.windows.first
        
        if let statusBar = keyWindow?.viewWithTag(tag) {
            return statusBar
        } else {
            let height = keyWindow?.windowScene?.statusBarManager?.statusBarFrame ?? .zero
            let statusBarView = UIView(frame: height)
            statusBarView.tag = tag
            statusBarView.layer.zPosition = 999999
            
            keyWindow?.addSubview(statusBarView)
            return statusBarView
        }
    }
}

使用できる SFSafariViewController のカスタマイズに役立つプロパティがいくつかあります。

  • preferredControlTintColor (ツールバー項目の色)
  • preferredBarTintColor (ツールバーの色)

CustomSFSafariViewControllerPSの代わりに使用することを忘れないでくださいSFSafariViewController。このようにできます。

let safariViewController = CustomSFSafariViewController(url: url)
于 2021-03-12T13:47:24.567 に答える