20

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

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

有什么解决办法吗?

它发生在 UILabel & UITextField & UITextView

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

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

4

5 回答 5

22

您无需更改 UILabel 上的任何设置,只需将带有 unicode 0x200F 的字符放在字符串之前。这是原因:

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

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

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

  1. בבוקר

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

1. בבוקר

于 2010-05-28T23:40:30.900 回答
16

基于 Mo 的出色回答:

这是代码 Obj-C:

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

而且它确实有效...

于 2010-11-30T00:00:09.263 回答
8

我有一个稍微不同的问题,但莫的回答给了我线索。

我想"abcd"在 RTL 方向 ( "dcba") 上显示 LTR 文本(如 ),而不必自己进行字符串反转。结果将字符串封闭在两者之间\u202E\u202C起到了作用。

我还建议阅读以下页面,因为它很好地解释了所有这些 un​​icode 魔法:

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

于 2012-01-30T20:29:10.487 回答
6

Swift anybody?

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

    func stringByForcingWritingDirectionRTL() -> String {
        return "\u{200F}".stringByAppendingString(self)
    }
}
于 2015-04-20T07:34:22.787 回答
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."
于 2010-02-08T08:37:23.223 回答