React-native: Status Bar Dark Content Not Working On iOS 13 Dark Mode

Created on 27 Sep 2019  路  24Comments  路  Source: facebook/react-native

React Native version: 0.60.0

Steps To Reproduce

  1. StatusBar.setBarStyle('dark-content'); // Not Working

Bug iOS Stale

Most helpful comment

I solved the problem.

Apple has added a new constant to the status bar with the latest update, so dark-content doesn't work. (in dark-mode)

https://developer.apple.com/documentation/uikit/uistatusbarstyle?language=objc

New Constant: UIStatusBarStyleDarkContent - A dark status bar, intended for use on light backgrounds.

  • Open XCode
  • Search: RCTStatusBarManager.m
  • Pods/Development Pods/React-Core/Modules/RCTStatusBarManager.m (xCode)

  • Other Editor
    node_modules/react-native/React/RCTStatusBarManager.m

RCT_ENUM_CONVERTER(UIStatusBarStyle, (@{
  @"default": @(UIStatusBarStyleDefault),
  @"light-content": @(UIStatusBarStyleLightContent),
  @"dark-content": @(UIStatusBarStyleDefault),
}), UIStatusBarStyleDefault, integerValue);

To Change:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunguarded-availability"

RCT_ENUM_CONVERTER(UIStatusBarStyle, (@{
  @"default": @(UIStatusBarStyleDefault),
  @"light-content": @(UIStatusBarStyleLightContent),
  @"dark-content": (@available(iOS 13.0, *)) ? @(UIStatusBarStyleDarkContent) : @(UIStatusBarStyleDefault),
}), UIStatusBarStyleDefault, integerValue);

#pragma clang diagnostic pop

All 24 comments

+1

Same here

As a workaround you could probably update the following keys in the Info.plist file, overriding the system dark mode:

<key>UIUserInterfaceStyle</key>
<string>Light</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>

I've already added this: Dark mode disabled, but: status bar does not affect.

<key>UIUserInterfaceStyle</key>
<string>Light</string>

And the problem is solved when I add it, but

<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>

This time I get an error like this:
Simulator Screen Shot - iPhone 11 Pro Max - 2019-09-27 at 21 11 12

This appears to be the same issue as this https://github.com/facebook/react-native/issues/26369

I solved the problem.

Apple has added a new constant to the status bar with the latest update, so dark-content doesn't work. (in dark-mode)

https://developer.apple.com/documentation/uikit/uistatusbarstyle?language=objc

New Constant: UIStatusBarStyleDarkContent - A dark status bar, intended for use on light backgrounds.

  • Open XCode
  • Search: RCTStatusBarManager.m
  • Pods/Development Pods/React-Core/Modules/RCTStatusBarManager.m (xCode)

  • Other Editor
    node_modules/react-native/React/RCTStatusBarManager.m

RCT_ENUM_CONVERTER(UIStatusBarStyle, (@{
  @"default": @(UIStatusBarStyleDefault),
  @"light-content": @(UIStatusBarStyleLightContent),
  @"dark-content": @(UIStatusBarStyleDefault),
}), UIStatusBarStyleDefault, integerValue);

To Change:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunguarded-availability"

RCT_ENUM_CONVERTER(UIStatusBarStyle, (@{
  @"default": @(UIStatusBarStyleDefault),
  @"light-content": @(UIStatusBarStyleLightContent),
  @"dark-content": (@available(iOS 13.0, *)) ? @(UIStatusBarStyleDarkContent) : @(UIStatusBarStyleDefault),
}), UIStatusBarStyleDefault, integerValue);

#pragma clang diagnostic pop

pragma clang diagnostic pop

Seems to work. Can we expect this to be pushed into RN anytime soon?

@mronline's solution worked perfectly on RN 0.59.9

@mronline's solution worked on RN 0.59.2 :tada:

So not just an issue with RN 0.60? Hopefully it can be fixed for 59, 60 and 61 then... Monkey patching the xcode file is awful.

I solved the problem with this commit: https://github.com/facebook/react-native/commit/796b3a1f8823c87c9a066ea9c51244710dc0b9b5

  1. Update node_modules/react-native/React/Modules/RCTStatusBarManager.m.
  2. pod install in ./ios.
  3. react-native run-ios

for hot fixed react-native file can be used this package https://github.com/ds300/patch-package

@wphestiraid You made my day! thank you 馃槂

+1

+1

This has been fixed in RN 0.61.2 or can be patched as described above. I think this issue can be closed.

pragma clang diagnostic push

pragma clang diagnostic ignored "-Wunguarded-availability"

RCT_ENUM_CONVERTER(UIStatusBarStyle, (@{
@"default": @(UIStatusBarStyleDefault),
@"light-content": @(UIStatusBarStyleLightContent),
@"dark-content": (@available(iOS 13.0, *)) ? @(UIStatusBarStyleDarkContent) : @(UIStatusBarStyleDefault),
}), UIStatusBarStyleDefault, integerValue);

pragma clang diagnostic pop

Also please make sure you have this enabled in your info.plist file

    <key>UIViewControllerBasedStatusBarAppearance</key>
    <true/>

and edit the code to this, so it supports the newest 13.1.2 as well.

RCT_ENUM_CONVERTER(UIStatusBarStyle, (@{
  @"default": @(UIStatusBarStyleDefault),
  @"light-content": @(UIStatusBarStyleLightContent),
  @"dark-content": (@available(iOS 13, *)) ? @(UIStatusBarStyleDarkContent) : @(UIStatusBarStyleDefault),
}), UIStatusBarStyleDefault, integerValue);

#pragma clang diagnostic pop

Also please make sure you have this enabled in your info.plist file

It wrong no add this to info.plist otherwise you receive red box error.

@fonov I just did that and it works perfectly fine in my iOS 13 device and iOS 13.1.2 as well

Actually StatusBar.setBarStyle('dark-content'); worked for Expo SDK v33.0.0 which is based on RN 0.59.8. We had to use it as we can't do pod install in Expo

Source: expo/expo#3874

Note that now it seems that we need to explicitly set StatusBar.setBarStyle('dark-content'); (in index.js?) to restore pre-0.61.2 behaviour. Before 0.61.2 it defaulted to dark-content when nothing was set.

Successfully fixed this issue by making changes in info.plist describe here and changes in RCTStatusBarManager.m describe here.

credits goes to @gpawlik & @mronline

Successfully fixed this issue by making changes in info.plist describe here and changes in RCTStatusBarManager.m describe here.

credits goes to @gpawlik & @mronline

It helped me a lot.
But after update React-Native 0.60.5 -> 0.61.5 its fixed without any modifying

Hey there, it looks like there has been no activity on this issue recently. Has the issue been fixed, or does it still require the community's attention? This issue may be closed if no further activity occurs. You may also label this issue as a "Discussion" or add it to the "Backlog" and I will leave it open. Thank you for your contributions.

Closing this issue after a prolonged period of inactivity. If this issue is still present in the latest release, please feel free to create a new issue with up-to-date information.

Was this page helpful?
0 / 5 - 0 ratings