2

我目前正在尽我所能了解 Cocoa 的文本“架构”。我煞费苦心地学习了所有关于NSFontDescriptorNSTextTabNSTextView类的知识,我想我真的理解它是如何工作的。但是,我似乎无法弄清楚一件事:NSNaturalTextAlignment. 我的意思是,我明白了。我知道当字体的“脚本”是 RTL 时,自然对齐是正确的,当它是 LTR 时,自然对齐是左。所有这些都是有道理的。但是,如何确定字体脚本的自然方向?我问是因为我的小应用程序是如何设置的。我目前有一个带有通常嫌疑人的迷你格式化栏:

  • NSPopUpButton选择字体系列
  • NSPopUpButton选择字体
  • ACustomComboBox选择字体大小
  • NSSegmentedControl带有BI, U 等的段。

在这些元素之后,我有了对齐控件,它也是一个NSSegmentedControl. 在其中,我有四个选项:左、居中、右和对齐。同样,非常基本的东西。对齐控件的巧妙之处在于,我已将每个段的标记设置为对应于一个NSTextAlignment值。因此,当按下“左”段时,所选文本向左对齐。“居中”、“正确”和“正当”也是如此。

问题是很多时候属性字符串NSParagraphStyle会返回一个NSNaturalTextAlignment值。

该文档指出:

返回值是“NSTextAlignment”中描述的对齐方式之一。

文本 usingNSNaturalTextAlignment实际上是使用其他对齐方式之一显示的,具体取决于文本脚本的自然对齐方式。

好吧,我很高兴 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属性有这个信息,但我没有找到它。可可大师,有什么建议吗?提前致谢!

4

1 回答 1

0

在文件 NSText.h 中定义

NSNaturalTextAlignment = 4 // 表示脚本的默认对齐方式

我认为脚本是书面文本的意思。

您可以使用 switch (pStyle.alignment 或 self.textEditor.baseWritingDirection) 更改代码,并为每个对齐添加 case:。

我不是专家,但我认为,这是你需要知道的,才能继续前进。关于对齐的信息可能是字体的一部分,但这是推测性的!它也有可能取自用户设置键盘的默认语言。文档或 Internet 中的 NSLocale 可能允许更深入地研究这个主题。

于 2014-03-08T19:58:14.803 回答