#react-native
Вопрос:
Краткие сведения
Некоторые клиенты, обновившиеся до iOS 15 (выпущено 2021-09-20), испытывают проблемы с визуализацией компонентов, основанных на информации об измерениях окон из useWindowDimensions
или Dimensions.get('window')
.
Для пользователей iOS 15 после нового запуска приложения useWindowDimensions
и Dimensions.get('window')
вернет либо 0, либо отрицательное значение. В зависимости от того, как эти API использовались в компоненте, регрессия будет продолжаться до следующего события активного приложения / набора других измерений в лучшем случае, а в худшем случае не сможет быть решена.
Я открыл запрос на вывод с помощью React-Native для отслеживания на GitHub.
Детальный Дизайн
На iOS, RCTDeviceInfo.mm сигнализирует стороне RN об обновлении словаря заданных измерений, если происходят определенные события жизненного цикла iOS, такие как активизация приложения и события доступности.
Я предлагаю добавить еще одного слушателя для RCTContentDidAppearNotification
in RCTDeviceInfo.mm. Ниже приведена разница:
--- node_modules/react-native/React/CoreModules/RCTDeviceInfo.mm
node_modules/react-native/React/CoreModules/RCTDeviceInfo.mm
@@ -14,6 14,7 @@
#import <React/RCTEventDispatcher.h>
#import <React/RCTUIUtils.h>
#import <React/RCTUtils.h>
#import <React/RCTRootView.h>
#import "CoreModulesPlugins.h"
@@ -71,6 72,11 @@
name:RCTUserInterfaceStyleDidChangeNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(interfaceFrameDidChange)
name:RCTContentDidAppearNotification
object:nil];
#endif
}
RCTContentDidAppearNotification
Событие уже генерируется библиотекой iOS React, когда
пакет React Native был инициализирован, и представление компонента корневого приложения может быть добавлено
и отображено в RCTRootView.m
представлении «s». Излучение этого события гарантирует, что сторона RN готова
получать события обновления измерений и что компоненты смогут надежно получить
ожидаемое значение размера окна.
Вопрос
Сколько других сталкивались с этой проблемой и каково было ваше решение/обходной путь для предотвращения проблем с отображением iOS 15, когда контент либо был «раздавлен», либо вообще не отображался?