web-dev-qa-db-ger.com

die Statusleiste verschwand nach dem Vollbildvideo in WKWebView nur in iOS 12

Wie Sie sehen, ist dies nur in iOS 12 der Fall.

iOS 12 iOS 11 

 enter image description here  enter image description here

hier ist mein 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()
    }
}

meine info.plist ist gleich unten:  enter image description here

Weiß jemand, wie man es löst? 

Ich weiß, dass es helfen wird, wenn ich den Schlüssel View controller-based status bar appearance auf YES setze. In diesem Fall sieht es jedoch so aus:

 enter image description here

Es gibt einen unbekannten Grund, die Statusleiste von Weiß auf Schwarz zu ändern. Mein reales Projekt ist in einem großen Maßstab. Daher ist es nett, die ursprüngliche Einstellung zu lösen, anstatt jeden ViewController von einer Klasse erben zu lassen, die eine Unterklasse ist UIViewController oder fügen Sie dynamic hinzu, um prefersStatusBarHidden und preferredStatusBarStyle in der Erweiterung zu überschreiben (versuchen Sie es hier nur zu erzwingen, dass der Aktualisierungsstatus angezeigt wird, wenn View controller-based status bar appearance auf YES gesetzt ist).

Ich hoffe, es gibt eine Lösung für View controller-based status bar appearance, die auf NO eingestellt ist, die sehr hilfreich sein wird.

hier ist das Demoprojekt, es wurde von Xcode9.4 erstellt. Probieren Sie es aus.

7
kidnapper

Entfernen Sie die folgende Eigenschaft aus der info.plist-Datei. und gib es nur programmgesteuert.

Die Statusleiste ist anfangs ausgeblendet: NO

Anzeige der Controller-basierten Statusleiste: NEIN

Statusleistenstil: UIStatusBarStyleLightContent

Es kann Arbeit für Sie sein.

5

Verwenden Sie diese Lösung:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  ...
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoExitFullScreen:) name:@"UIWindowDidBecomeHiddenNotification" object:nil];
...
}

- (void)videoExitFullScreen:(id)sender
{
  [[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
}

Referenz mehr hier:

https://github.com/react-native-community/react-native-webview/issues/62

Am Ende habe ich die Kategorie in Objective-c verwendet, um dieses Problem zu lösen Ich setze View controller-based status bar appearance auf YES und füge folgenden Code hinzu

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

- (BOOL)prefersStatusBarHidden
{
    return NO;
} 

Nach meiner Erfahrung müssen Sie auch den obigen Code in UINavigationViewController ..__ implementieren. Es hat anscheinend eine eigene Implementierung für das . Außerdem muss jedes Fenster sehen, ob ein RootViewController vorhanden ist , dann füge einen hinzu.

Diese Lösung ist zwar etwas umständlich, aber damit habe ich mein Problem bisher perfekt gelöst.

0
kidnapper

Abonnieren für 

UIWindowDidBecomeHiddenNotification

veranstaltung

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

und setzen Sie den Statusleistenstatus im Handler: 

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