问题描述
每当我在运行时使用以下代码切换语言时:
//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()
使用合成布局的任何集合视图都将被镜像,而不是布局翻转,而是内容被镜像。
解决方法
最后弄清楚了,必须去老学校:
1-对于收藏夹视图,无论何时创建(在情节提要中或通过代码),都应修复语义以强制LTR
2-只要该语言需要RTL,就将scaleX = -1,scaleY = 1的转换应用于CollectioView本身。
3-对于每个视图单元,应用scaleX = -1,scaleY = 1的另一个变换
Note
对于某些布局(主要是具有动态项目宽度的水平滚动),将转换直接分配给集合视图单元格将不起作用,并且将离开集合视图单元格mirrored
通过集合视图转换。
3.1-因此需要将转换应用于集合视图单元格的顶级子视图。
为使代码最少,应将集合视图单元的所有子视图包装到一个填充集合视图单元的视图中,然后对其进行转换。