尝试显示以数字开头的希伯来字符串,始终在字符串末尾显示数字,如下所示:1。יוםשישיבבוקר
但我需要在文本右侧显示数字 -
任何解决方案?
UILabel& amp; UITextField& UITextView
并尝试在左侧写下数字也会产生相同的数据。
使用UITextAlignment的组合将无济于事。
答案 0 :(得分:22)
您无需更改UILabel上的任何设置,只需在字符串前添加unicode 0x200F的字符即可。这就是原因:
在Unicode中,许多字符具有特定的方向性,这使得系统知道它必须被写入,比如说LTR,就像سلام一样。该段通常使用其第一个字符的方向。这就是为什么没有数字的字符串会自动从右到左输入。
现在有些人物,比如数字,有“弱”的方向性,所以他们基本上就是周围的。当您键入“1.בבוקר”时,系统首先看到1,因此采用通常的LTR方向。更改对齐将无济于事,因为它只是将整个文本向右移动或居中。
要解决此问题,Unicode有两个标记字符(LTR:0x200E,RTL:200F)。这些是看不见的,但决定了方向性。所以虽然“1.בבוקר”是......
如果您键入“#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魔法的非常好的解释:
答案 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."