我目前正在尽我所能了解 Cocoa 的文本“架构”。我煞费苦心地学习了所有关于NSFontDescriptor
、NSTextTab
和NSTextView
类的知识,我想我真的理解它是如何工作的。但是,我似乎无法弄清楚一件事:NSNaturalTextAlignment
. 我的意思是,我明白了。我知道当字体的“脚本”是 RTL 时,自然对齐是正确的,当它是 LTR 时,自然对齐是左。所有这些都是有道理的。但是,如何确定字体脚本的自然方向?我问是因为我的小应用程序是如何设置的。我目前有一个带有通常嫌疑人的迷你格式化栏:
NSPopUpButton
选择字体系列NSPopUpButton
选择字体ACustomComboBox
选择字体大小NSSegmentedControl
带有B,I, U 等的段。
在这些元素之后,我有了对齐控件,它也是一个NSSegmentedControl
. 在其中,我有四个选项:左、居中、右和对齐。同样,非常基本的东西。对齐控件的巧妙之处在于,我已将每个段的标记设置为对应于一个NSTextAlignment
值。因此,当按下“左”段时,所选文本向左对齐。“居中”、“正确”和“正当”也是如此。
问题是很多时候属性字符串NSParagraphStyle
会返回一个NSNaturalTextAlignment
值。
该文档指出:
返回值是“NSTextAlignment”中描述的对齐方式之一。
文本 using
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
属性有这个信息,但我没有找到它。可可大师,有什么建议吗?提前致谢!