web-dev-qa-db-fra.com

la barre d'état a disparu après la vidéo plein écran dans WKWebView uniquement dans iOS 12

Comme vous pouvez le constater, cela n’est arrivé que sous iOS 12.

iOS 12 iOS 11 

 enter image description here  enter image description here

voici mon code: 

import UIKit
import WebKit

class ViewController: UIViewController {

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

    override var prefersStatusBarHidden: Bool {
        return false
    }

    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        webView = WKWebView(frame: UIScreen.main.bounds)
        view.addSubview(webView)
        webView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        webView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        webView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
        webView.loadHTMLString("<p><iframe src=\"https://www.youtube.com/embed/HCjNJDNzw8Y\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"\"></iframe></p>", baseURL: URL(string: "https://www.youtube.com/"))
        setNeedsStatusBarAppearanceUpdate()
    }
}

mon info.plist est juste en dessous:  enter image description here

Est-ce que quelqu'un sait comment le résoudre? 

Je sais que si je règle la clé View controller-based status bar appearance sur YES aidera, mais dans ce cas cela ressemblera à ceci:

 enter image description here

Il y a une raison inconnue de changer la barre d'état en blanc et noir, et comme mon projet réel est à grande échelle, il sera donc agréable de le résoudre dans son contexte d'origine, plutôt que de faire en sorte que chaque ViewController hérite d'une classe qui est la sous-classe UIViewController ou ajoutez dynamic pour remplacer prefersStatusBarHidden et preferredStatusBarStyle en extension (essayez simplement de forcer l'affichage de la barre d'état de la mise à jour lorsque View controller-based status bar appearance est défini sur YES)

J'espère qu'il existe une solution pour View controller-based status bar appearance définie sur NO, ce sera très utile thx.

ici est le projet de démonstration, il a été créé par Xcode9.4, n'hésitez pas à l'essayer.

7
kidnapper

Supprimer la propriété suivante du fichier info.plist. et donnez-le uniquement par programme.

La barre d'état est initialement masquée: NON

Afficher l'apparence de la barre d'état basée sur le contrôleur: NON

Style de la barre d'état: UIStatusBarStyleLightContent

C'est peut-être un travail pour vous.

5

En fin de compte, j'ai utilisé category dans objective-c pour résoudre ce problème . J'ai mis View controller-based status bar appearance à YES et ajouté du code ci-dessous

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

- (BOOL)prefersStatusBarHidden
{
    return NO;
} 

En ce qui concerne mon expérience, vous devez également implémenter le code ci-dessus dans UINavigationViewController . Il semble qu'il ait sa propre implémentation pour cela . , puis ajoutez-en un.

Bien que cette solution soit un peu lourde, mais c’est celle à laquelle j’ai résolu mon problème à la perfection.

0
kidnapper

Abonnez-vous à 

UIWindowDidBecomeHiddenNotification

un événement

NSNotificationCenter.DefaultCenter.AddObserver(new NSString("UIWindowDidBecomeHiddenNotification"), HandleAction);

et définir l'état de la barre d'état dans le gestionnaire: 

void HandleAction(NSNotification obj)
{
    UIApplication.SharedApplication.StatusBarHidden = false;
}