RTL在行尾显示数字

时间:2010-02-02 09:28:48

标签: iphone alignment right-to-left

尝试显示以数字开头的希伯来字符串,始终在字符串末尾显示数字,如下所示:1。יוםשישיבבוקר

但我需要在文本右侧显示数字 -

任何解决方案?

UILabel& amp; UITextField& UITextView

并尝试在左侧写下数字也会产生相同的数据。

使用UITextAlignment的组合将无济于事。

5 个答案:

答案 0 :(得分:22)

您无需更改UILabel上的任何设置,只需在字符串前添加unicode 0x200F的字符即可。这就是原因:

在Unicode中,许多字符具有特定的方向性,这使得系统知道它必须被写入,比如说LTR,就像سلام一样。该段通常使用其第一个字符的方向。这就是为什么没有数字的字符串会自动从右到左输入。

现在有些人物,比如数字,有“弱”的方向性,所以他们基本上就是周围的。当您键入“1.בבוקר”时,系统首先看到1,因此采用通常的LTR方向。更改对齐将无济于事,因为它只是将整个文本向右移动或居中。

要解决此问题,Unicode有两个标记字符(LTR:0x200E,RTL:200F)。这些是看不见的,但决定了方向性。所以虽然“1.בבוקר”是......

  1. בבוקר
  2. 如果您键入“#x200F”+“1.בבוקר”,它将显示如下:

    1。 בבוקר

答案 1 :(得分:15)

以Mo的伟大答案为基础:

这是代码Obj-C:

NSString *RTFstr = "1. בבוקר"; //This could be any right-to-left string
NSString *directionalString = [@"\u200F" stringByAppendingString:[note text]];
[someUITextView setString:directionalString];

它实际上有效......

答案 2 :(得分:6)

我的问题略有不同,但莫的答案给了我线索。

我希望得到一个在RTL方向("abcd")显示的LTR文本(如"dcba"),而不必自己进行字符串反转。事实证明,将\u202E\u202C之间的字符串括起来就可以了。

我还建议阅读以下页面,因为它给出了所有这些unicode魔法的非常好的解释:

http://www.iamcal.com/understanding-bidirectional-text/

答案 3 :(得分:5)

任何人都快点?

extension String {
    func stringByForcingWritingDirectionLTR() -> String {
        return "\u{200E}".stringByAppendingString(self)
    }

    func stringByForcingWritingDirectionRTL() -> String {
        return "\u{200F}".stringByAppendingString(self)
    }
}

答案 4 :(得分:0)

不确定是否有更好的方法来做到这一点,但你可能想尝试这样的事情:

NSString *test = @"12. just a teststring";
NSString *number = [test substringToIndex: [test rangeOfString: @" "].location];
NSString *text = [test substringFromIndex: [test rangeOfString: @" "].location];
test = [NSString stringWithFormat: @"%@ %@", text, number];
// test == "just a teststring 12."