用于RTL语言的可靠iOS映像翻转

用于RTL语言的可靠iOS映像翻转,ios,xcode,right-to-left,Ios,Xcode,Right To Left,我试图让图像翻转可靠地工作,但我发现了一些问题。我在Xcode资源目录中管理我的映像,需要用RTL语言翻转的映像已经配置为“Direction”属性设置为“Left-to-right,Mirrors”。 在某些情况下,我有两个独立的资产,因为翻转是不够的。将“方向”属性设置为“两者”,并提供两个单独的图像资源。 所有图像都是启用了“保留矢量数据”的PDF资源 只要我使用iOS 11和Xcode 9.2进行测试,这一切都非常有效。 当我在iOS 9上测试时,问题就开始了。为RTL配置的图像在我启动

我试图让图像翻转可靠地工作,但我发现了一些问题。我在Xcode资源目录中管理我的映像,需要用RTL语言翻转的映像已经配置为“Direction”属性设置为“Left-to-right,Mirrors”。 在某些情况下,我有两个独立的资产,因为翻转是不够的。将“方向”属性设置为“两者”,并提供两个单独的图像资源。 所有图像都是启用了“保留矢量数据”的PDF资源

只要我使用iOS 11和Xcode 9.2进行测试,这一切都非常有效。 当我在iOS 9上测试时,问题就开始了。为RTL配置的图像在我启动应用程序时不会显示,即使我没有使用RTL语言运行

自从Xcode 9.3以来,我似乎遇到了一个新问题。资产目录自动更新;RTL映像将重新配置为“两者”方向,并对目录中的json文件进行更改。选择“从左到右,镜像”不再起作用

有没有人知道如何让它可靠地工作?或者我只是在看Xcode中最新的bug和iOS9的一些老问题

[编辑]
进一步分析生成的IPA文件后,Assets.car文件似乎不包含RTL图像的.png文件。它们似乎没有生成(因为源文件是PDF),因此这可以解释iOS 9中缺少的图像(不使用PDF图像)。

我修复了它,但在Apple开发者论坛上有人指出,直到Xcode 8/iOS 10才引入资产目录“方向”属性

这意味着它在iOS 9中不起作用,而且它可能是一个Xcode错误,当部署目标设置为低于iOS 10时,您甚至可以选择它

因此,当您希望与较旧的iOS设备兼容时,不要尝试使用此功能!你仍然可以让它按程序工作

如果您在UIBarButtonItem中有一个图像,则可以对此按钮设置一个出口,并在viewDidLoad中运行以下操作:

self.someButton.image = [self.someButton.image imageFlippedForRightToLeftLayoutDirection];
这是因为iOS 9支持imageFlippedForRightToLeftLayoutDirection。它仅在应用程序处于RTL模式时翻转图像

如果需要加载完全不同的图像,可以按如下操作:

if ([UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft) {
    self.someButton.image = [UIImage imageNamed:@"someRTLImage"];
}