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 上运行得很好! 有什么想法吗?
我建议您将其添加到iOS项目的AppDelegate.mm中。
#import <React/RCTI18nUtil.h>
...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
[[RCTI18nUtil sharedInstance] allowRTL:YES];
...
}