iOS 上的 ForceRTL 无法在 React Native 应用程序中工作

问题描述 投票:0回答:1

Android 对方向变化反应良好,但是 iOS 没有正确切换 RTL,iOS 不断重新启动,当我检查 isRTL 的状态时,它没有改变

 useEffect(() => {
    initializingSet(true);
    const languageSetter = async () => {
      const storageLang = await AsyncStorage.getItem("appLang");
      const systemLanguage = getLocales()[0].languageCode;
      const { isRTL } = I18nManager;
      console.log(
        storageLang,
        storageLang,
        appLang,
        I18nManager.isRTL,
        "<<=Lang"
      );
      if (appLang) {
        changeLanguage(appLang);
        if (appLang !== storageLang) {
          AsyncStorage.setItem("appLang", appLang);
        }
        if ((appLang === "en" && isRTL) || (appLang !== "en" && !isRTL)) {
          I18nManager.allowRTL(!isRTL);
          I18nManager.forceRTL(!isRTL); // FIXNOW: iOS not switching to RTL
          RNRestart.restart();
        }
        initializingSet(false);
      } else {
        if (storageLang) {
          appLangSet(storageLang as AppLanguagesType);
        } else {
          if (systemLanguage) {
            AsyncStorage.setItem("appLang", systemLanguage).finally(() =>
              appLangSet(systemLanguage as AppLanguagesType)
            );
          } else {
            appLangSet("en");
          }
        }
      }
    };

    languageSetter();
  }, [appLang]);

我的 app.json 有

supportsRTL

   "extra": {
      "supportsRTL": true,
           }

同一个应用程序在 Android 上运行得很好! 有什么想法吗?

reactjs react-native internationalization i18next react-i18next
1个回答
0
投票

我建议您将其添加到iOS项目的AppDelegate.mm中。

#import <React/RCTI18nUtil.h>
...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
 [[RCTI18nUtil sharedInstance] allowRTL:YES];
...
}
© www.soinside.com 2019 - 2024. All rights reserved.