从右向左翻转 UIImageViews 语言

问题描述 投票:0回答:8
当使用阿拉伯语等 RTL 语言时,iOS 会自动翻转整个

ViewController

,并且对大部分布局(尤其是文本)表现出色。默认行为是翻转布局,但保留 
UIImageViews
 相同的方向(因为您通常不想反转图像)。 

有没有办法指定当手机设置为RTL语言时某些图像应该翻转(例如箭头)?

ios internationalization
8个回答
26
投票
iOS 9 包含您可以使用的

imageFlippedForRightToLeftLayoutDirection

 方法,该方法在 RTL 本地化时自动翻转 UIImageView 中的图像。


18
投票
迄今为止我发现的最佳解决方案是将资产文件中的图像标记为镜像。

enter image description here


10
投票
如果当前语言是 RTL(从右到左),我们可以使用

imageFlippedForRightToLeftLayoutDirection

 返回翻转的图像。即

Objective-c

UIImage * flippedImage = [[UIImage imageNamed:@"imageName"] imageFlippedForRightToLeftLayoutDirection];

斯威夫特3

let flippedImage = UIImage(named: "imageName")?.imageFlippedForRightToLeftLayoutDirection()

来源:

Apple 文档


2
投票
当手机设置为 RTL 语言时,您必须手动翻转 UIImageView 中的 UIImage。这可以通过以下代码轻松实现:

UIImage* defaultImage = [UIImage imageNamed:@"default.png"]; UIImage* flipImage = [UIImage imageWithCGImage:sourceImage.CGImage scale:1.0 orientation: UIImageOrientationUpMirrored]; myImageview.image = flipImage;
    


0
投票
当我们等待 iOS 9 改进从右到左的支持时,您可以创建一个

UIImageView

 子类并覆盖 
setImage
 以镜像内部图像,如 @nikos-m 建议并调用 
super.image = flipImage

这样您就可以使用 Interface Builder 中的自定义类轻松设置要翻转的所有图像视图,而不必添加

IBOutlet

s。


0
投票

斯威夫特5

如果您想个性化图像翻转,您可以将每个图像注册到您想要的方向,因为布局方向是一个特征:

let leftToRight = UITraitCollection(layoutDirection: .leftToRight) let rightToLeft = UITraitCollection(layoutDirection: .rightToLeft) let imageAsset = UIImageAsset() let leftToRightImage = UIImage(named: "leftToRightImage")! let rightToLeftImage = UIImage(named: "rightToLeftImage")! imageAsset.register(leftToRightImage, with: leftToRight) imageAsset.register(rightToLeftImage, with: rightToLeft)
这与@SergioM 回答的资产目录中配置它相同。


0
投票
在最新的 Xcode 中,我们可以选择为 RTL 布局设置不同的图像。

第1步:

转到资产 --> 选择您的图像 --> 单击显示属性管理器

第2步:

选择方向为“两者”

步骤3:

现在它将显示 RTL 图像的选项

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.