1

每当我使用以下代码在运行时切换语言时:

//set apple language to force localization use the intended language 
let userdef = UserDefaults.standard
userdef.set(["ar" /*or "en" to switch to english*/], forKey: "AppleLanguages")
userdef.synchronize()
//force all views to use propery layout direction
UIView.appearance().semanticContentAttribute = forceRightToLeft /*or .forceLeftToRight*/
//reload root view controller
(UIApplication.shared.delegate as? AppDelegate)?.window?.rootViewController = UIStoryboard(name: "Main", bundle: .main).instantiateInitialViewController()

任何使用组合布局的集合视图都会被镜像,而不是布局翻转而是内容被镜像。

4

1 回答 1

0

终于想通了,必须去老学校:

1-对于集合视图,无论何时创建(在故事板中或通过代码),修复语义以强制 LTR

2- 每当语言需要 RTL 时,将 scaleX = -1, scaleY = 1 的变换应用于 CollectioView 本身。

3- 对于每个视图单元,应用另一个变换,scaleX = -1,scaleY = 1

Note对于某些布局(主要是动态项目宽度的水平滚动),直接将变换分配给集合视图单元格将不起作用,并且将mirrored通过集合视图变换离开 CollectionView 单元格。

3.1-因此需要将转换应用于集合视图单元格的顶级子视图。

为了最小化代码,应该将集合视图单元格的所有子视图包装到一个填充集合视图单元格的视图中,并将转换应用于它。

于 2020-08-29T23:10:09.553 回答