ご覧のとおり、これはiOS 12でのみ発生しました。
iOS 12 iOS 11
これが私のコードです:
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()
}
}
誰かがそれを解決する方法を知っていますか?
キーView controller-based status bar appearance
をYES
に設定すると役立つことがわかりますが、その場合は次のようになります。
ステータスバーを白と黒から変更する理由は不明ですが、私の実際のプロジェクトは大規模であるため、すべてのViewControllerがサブクラスである1つのクラスから継承するのではなく、元の設定で解決すると便利ですUIViewControllerまたはdynamic
を追加して、prefersStatusBarHidden
とpreferredStatusBarStyle
を拡張機能でオーバーライドします(ここで、View controller-based status bar appearance
がYES
に設定されている場合に、更新ステータスバーを強制的に表示しようとします)。
View controller-based status bar appearance
をNO
に設定して、非常に役立つ解決策があることを願っています。
ここは、Xcode9.4で作成されたデモプロジェクトです。自由に試してみてください。
info.plist
ファイルから以下のプロパティを削除します。プログラムでのみ与える。
ステータスバーは最初は非表示です:いいえ
コントローラベースのステータスバーの外観を表示する:いいえ
ステータスバーのスタイル:UIStatusBarStyleLightContent
それはあなたのための仕事かもしれません。
このソリューションを使用してください:
- (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];
}
詳細はこちら:
https://github.com/react-native-community/react-native-webview/issues/62
最終的に私はこの問題に対処するために、objective-cのカテゴリを使用しました。 View controller-based status bar appearance
をYESにして、以下のコードを追加します
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
- (BOOL)prefersStatusBarHidden
{
return NO;
}
私の経験としては、上記のコードをUINavigationViewControllerにも実装する必要があります。そのための独自の実装があるようです。また、すべてのウィンドウでrootViewControllerが存在するかどうかを確認し、存在しない場合は追加します。
この解決策は少し面倒ですが、それは私がこれまで私の問題を完全に解決したものです。
購読する
UIWindowDidBecomeHiddenNotification
出来事
NSNotificationCenter.DefaultCenter.AddObserver(new NSString("UIWindowDidBecomeHiddenNotification"), HandleAction);
ステータスバーの状態をハンドラーに設定します。
void HandleAction(NSNotification obj)
{
UIApplication.SharedApplication.StatusBarHidden = false;
}