是否有明确的方法来检测NSString
或NSAttributedString
中的文字方向是否从右向左?文本是从外部资源接收的,未在应用程序中输入(不能使用UITextInput
协议方法)。
我一直在使用CFStringTokenizerCopyBestStringLanguage()
然后+[NSLocale characterDirectionForLanguage:]
检测它,但对于只有少数阿拉伯字符和许多拉丁字符串的字符串来说,这是非常不可靠的。它们在标签中显示时作为RTL处理,但不正确的方向检测会导致行为不一致。
在开发过程中,我发现创建NSAttributedString
时没有属性,除了字体并使用TTTAttributedLabel
显示它,RTL文本与右边缘对齐。使用简单NSString
时,或使用带有属性字符串的标准UILabel
时,对齐方式保持不变。
因此,文本中必须有一些内容称“它是RTL”,并且有一些方法可以检测它。
我分析了我从服务器收到的内容,并且没有标准的Unicode bidi字符。这是它的外观。 JSON在ascii中发送,所有unicode字符都被转义:
"\u0643\u062a\u0628\u062a \u0648\u0648\u062c\u0650 .."
当没有出现时,它看起来像这样,\u0643
位于点之前的最右边:
"كتبت ووجِ .."
据我所知,每个字符代表阿拉伯语中的单个字符,并且没有U+202B
或类似的控制字符可用于轻松检测方向。
然而,当通过TTTAttributedLabel
呈现此文本时,它正确对齐。我开始研究source code,它没有做任何事情来检测方向或设置对齐。它只使用CTFramesetterCreateWithAttributedString()
创建了框架设置,然后,当它使用CTFrameGetLines()
获取线条并使用CTFrameGetLineOrigins()
线条位置时,它们已经与右边对齐。
那么,是否有人知道方向是否可以仅通过公开(并且最好是快速)API方法的文本检测到?
答案 0 :(得分:0)
选中此链接对您有帮助Automatically align text in UILabel according to text language
更改左右对齐
if (isCodePointStrongRTL(utf32chars[i]))
return 2;
if (isCodePointStrongLTR(utf32chars[i]))
return 0;
答案 1 :(得分:0)
在其他问题上看到了这个评论,并认为对其他人来说检查这个问题很重要。这正是我在寻找RTL-LTR:
" 但我一直在使用一种解决方案,根据已知的RTL语言明确设置方向,并以此为出发点: