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的主要内容,如果未能解决你的问题,请参考以下文章

如何将RTL和LTR文本方向混合在一起 元件?

动态更改引导网格方向( ltr 到 rtl 或反向)

将 LTR 转换为 RTL?

在 TextView 中使用区域设置 (ltr/rtl) 作为重力

如何在c sharp中以编程方式将html标签目录属性从rtl设置为ltr,反之亦然

在TextView中使用locale(ltr / rtl)作为重力