При переключении темного режима в iOS мы можем видеть, что предварительные просмотры приложений в переключателе приложений немедленно меняют свой внешний вид, даже если они приостановлены в фоновом режиме.
Этот пост нацелен на то, чтобы выяснить, возможно ли добиться этого в React Native (независимо от использования чистого React Native или Expo), и если нет, можем ли мы как-то помочь сделать это возможным?
Просмотрите анимацию:
Или нажмите здесь, если не отображается.
- Родное приложение «Настройки», даже если оно приостановлено в фоновом режиме, меняет свой внешний вид при переключении темного режима.
- Клиентское приложение Expo, также приостановленное в фоновом режиме (переключатель приложений был открыт из дома, а не во время использования Expo), не меняет свой внешний вид при переключении темного режима. Это произойдет только тогда, когда я нажму, чтобы вернуться в приложение.
- Я не уверен, что клиент Expo создан с помощью React Native, потому что поведение, описанное в «2. не всегда бывает. Но я попытался создать свое собственное приложение RN с
react-native-appearance
, и цвета не меняется при приостановке (как показано в анимации)
На данный момент существует хакерский способ частичного достижения этого, но я не думаю, что кто-то сможет отправить свое приложение с ним.
<View style={{
backgroundColor: isDarkModeOn ? 'black' : 'white', // remove this
}} />
Не указывайте backgroundColor
вообще, и оно будет вести себя как собственное приложение, даже если оно приостановлено и просматривается из переключателя приложений, вероятно, потому, что по умолчанию оно использует собственное значение… но:
- это относится только к
backgroundColor
- и только если это
<View/>
(или что-то подобное) - и ограничен черно-белым
Нам по-прежнему нужно полагаться на JavaScript, пока не выполняется одно из вышеперечисленных условий.
Хотелось бы верить, что есть решение, о котором я не знаю. Но до сих пор ни в одном из руководств по темному режиму я не упоминал об этом.