我目前正在努力学习关于Cocoa的文字“架构”。我已经煞费苦心地学习了NSFontDescriptor
,NSTextTab
和NSTextView
课程,我想我真的很了解这一切是如何运作的。但是,有一件事我似乎无法弄明白:NSNaturalTextAlignment
。我的意思是,我明白了。据我所知,当字体的“脚本”是RTL时,自然对齐是正确的,当它是LTR时,保留自然对齐。所有这些都是有道理的。但是,如何确定字体脚本的自然方向?我问,因为我的小应用程序是如何设置的。我目前有一个迷你格式栏与通常的嫌疑人:
NSPopUpButton
选择字体系列NSPopUpButton
选择字体ACustomComboBox
选择字体大小NSSegmentedControl
包含 B , I ,U等的细分在这些元素之后,我有了对齐控件,它也是NSSegmentedControl
。在其中,我有四个选项:左,中,右和对齐。再次,非常基本的东西。对齐控件的巧妙之处在于我为每个段设置了与NSTextAlignment
值对应的标记。因此,当按下“左”段时,所选文本对齐到左侧。 “居中”,“正确”和“合理”也是如此。
问题在于,归因字符串NSParagraphStyle
很多时候都会返回NSNaturalTextAlignment
值。
文档说明:
返回的值是“NSTextAlignment。”中描述的对齐之一。
使用
NSNaturalTextAlignment
的文本实际上是使用其他一个对齐方式显示的,具体取决于文本脚本的自然对齐方式。
好吧,我很高兴Apple了解文本脚本的自然对齐方式,但是我如何找到它呢?我目前已经实施了一个非常糟糕的解决方案,但老实说我无法解决这个问题。糟糕的解决方案如下所示:
- (void)updateTextAlignmentDisplayWithParagraphStyle:(NSParagraphStyle *)pStyle
{
NSTextAlignment alignment = pStyle.alignment;
if ( alignment == NSNaturalTextAlignment ) {
// This seems like a horrible way to determine the correct alignment ...
BOOL isRTL = ( self.textEditor.baseWritingDirection == NSWritingDirectionRightToLeft );
if ( isRTL ) {
alignment = NSRightTextAlignment;
} else {
alignment = NSLeftTextAlignment;
}
}
[self.alignmentControl selectSegmentWithTag:alignment];
}
文本视图的“基本”方向并没有真正告诉我有关字体本身方向的任何信息,但至少它暗示了字体可能的方向。我不知道。我只是觉得有一个超级秘密NSFontDescriptor
属性有这个信息,但我还没有找到它。可可大师,有什么建议吗?提前谢谢!
答案 0 :(得分:0)
在NSText.h文件中定义
NSNaturalTextAlignment = 4 //表示脚本
的默认对齐方式我认为脚本意味着书面文字。
您可以使用switch(pStyle.alignment或self.textEditor.baseWritingDirection)更改代码,并为每个对齐添加大小写。
我不是专家,但我认为,这是你需要知道的,向前发展。有关对齐的信息可能是Font的一部分,但这是推测性的!它也可以从用户设置键盘的默认语言中获取。文档或互联网中的NSLocale可能允许更深入地了解这个主题。