ios - 适用于 RTL 语言的可靠 iOS 图像翻转

标签 ios xcode right-to-left

我正在尝试使图像翻转可靠地工作,但我发现了一些问题。我在 Xcode Assets 目录中管理我的图像,需要在 RTL 语言中翻转的图像已配置为“方向”属性设置为“从左到右,镜像”。 在某些情况下,我有 2 个独立的 Assets ,因为翻转是不够的。这些配置的“方向”属性设置为“两者”,并提供两个单独的图像 Assets 。 所有图像都是启用了“保留矢量数据”的 PDF Assets 。

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

从Xcode 9.3开始,我好像遇到了新问题。 Assets 目录会自动更新; RTL 图像被重新配置为方向“两者”,并对目录中的 json 文件进行了更改。选择“从左到右,镜像”不再有效。

有没有人想出如何让它可靠地工作?或者我只是在查看 Xcode 中的最新错误和 iOS9 中的一些旧问题?

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

最佳答案

我修复了它,但 Apple 开发者论坛上有人指出 Assets 目录“方向”属性直到 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"];
}

关于ios - 适用于 RTL 语言的可靠 iOS 图像翻转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49689879/

相关文章:

iOS模拟器连接超时

objective-c - 读取 AFNetworking 响应 header

ios - Swift 中带有 print 或 println 的混合文本的文本方向

ios - 如何在 Storyboard中为新场景连接 Controller 文件

android - 在布局中覆盖从右到左

android - 如何将阴影调整为 RTL SlidingMenu

ios - 如何解析 {} 内的 JSON 数据?

ios - Swift viewdidload 中的 @IB Action 函数

ios - UIScrollView drawRect 中的自定义 UIView 从未调用过

ios - 如何像 Bloom 在 iOS 平台上做的那样在应用程序中安装其他应用程序?