LTR 到 RTL 在目标 c 中使用相同的 xib
Posted
技术标签:
【中文标题】LTR 到 RTL 在目标 c 中使用相同的 xib【英文标题】:LTR To RTL Using same xib in objective c 【发布时间】:2018-03-13 07:04:48 【问题描述】:我坚持一个观点,我想开发一个同时支持 LTR 和 RTL 的应用程序,但我不想为 LTR 和 RTL 创建两个 .xib。
那么任何人都可以使用相同的 xib 为我提供任何可从 LTR 到 RTL 的方法。
提前谢谢你。
【问题讨论】:
您的意思是在更改语言后不重新启动应用程序,我的意思是在相同的语言环境中? 在这里查看我的答案:完整背景(ios 版本、案例等)***.com/questions/31877140/… @Sh_Khan 是的,当用户从应用程序中选择语言时,我想将所有 UI 更改为 RTL,并且我将更改所有文本。意思是如果我在左下角有按钮并且我设置了 RTL 语言,那么该按钮应该设置为右下角精确镜像设计。 【参考方案1】:你可以通过改变语义来做到这一点
self.anyView.semanticContentAttribute = .forceLeftToRight
或
self.anyView.semanticContentAttribute = .forceRightToLeft
在objective-c中
self.anyView.semanticContentAttribute = UISemanticContentAttributeForceLeftToRight;
或者
self.anyView.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;
另请参阅此演示:RTLDemo
【讨论】:
查看编辑,也不要忘记将约束设置为前导和尾随而不是右/左,以便 RTL 可以工作 @hardikvyas 等待演示【参考方案2】:无需创建 2 个 xib 文件即可使 LTR 和 RTL 工作。
基本上你需要:
-
设置前导和尾随约束
如果 iPhone 语言是 RTL 语言,现在将充当尾随,而尾随将充当前导(因此无需创建 2 个 xib 文件,您的视图元素将被翻转)
在某些情况下,您可能希望使用imageFlippedForRightToLeftLayoutDirection() force RTL/LTR 图像:
image = [image imageFlippedForRightToLeftLayoutDirection];
在检查当前语言时使用:
BOOL isLeftToRight = [UIView userInterfaceLayoutDirectionForSemanticContentAttribute:[[self view] semanticContentAttribute]] == UISemanticContentAttributeForceLeftToRight;
请记住,每个 UIView 都有 semanticContentAttribute 可以设置为强制 RTL UISemanticContentAttributeForceRightToLeft。即:
[view setSemanticContentAttribute: UISemanticContentAttributeForceRightToLeft];
使用 textFields 时,请使用以下对齐方式,以便每个 RTL/LTR 都能正常工作:
【讨论】:
我希望它在目标 c 更新到 objc 感谢您的回答。您给定的解决方案对我来说非常好,再次感谢您.... 如果您认为此答案解决了您的问题,您可以重新接受 - 接受的答案是最适合您需求的答案。 您的解决方案对我有用,但正如我想要的那样完美,所以我接受了上述答案。但是由于您的回答也很好,所以我赞成您的回答并发表评论,以便其他开发人员也可以知道这个答案也有效。【参考方案3】:以下是我的一些方法。
首先,验证布局方向(你可以为此创建一个宏)
[UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft
将 IBOutlet 用于 NSLayoutConstraint 并设置常量/优先级以移动 UI 元素
对于标签,使用NSTextAlignmentNatural
用于 LTR 中的左对齐,对于 RTL 将照顾系统。否则你必须自己设置它们的文本对齐方式
对于一些相关的图像,您必须水平翻转它们
对于任何类型的绘图(在 drawRect 或图层中),您都应该注意
这些对我来说很重要,但还有更多。只要有创意
【讨论】:
以上是关于LTR 到 RTL 在目标 c 中使用相同的 xib的主要内容,如果未能解决你的问题,请参考以下文章
在 TextView 中使用区域设置 (ltr/rtl) 作为重力