为什么我的 CATextLayer 不响应 contentsGravity 属性?

Why does my CATextLayer not respond to the contentsGravity property?

我正在创建一个带有 layer-backed NSView 的 Cocoa 应用程序。我已将支持视图的图层自定义为 CATextlayer 类型,因为此视图的主要目的是显示一些文本。

我在我的 init 过程中包含了以下行,它对我尝试过的任何内容重力常数都不起作用:

textLayer.contentsGravity = kCAGravityBottomRight

另一方面,以下确实生效:

textLayer.alignmentMode = kCAAlignmentRight

所以基本的水平对齐可以工作,但我无法在垂直方向上调整 space。

CATextLayer中指定文本定位的最佳方式是什么?我也一直在尝试修改NSParagraphStyle中的属性支持属性字符串,但这似乎也无法定位文本?

如有任何帮助,我们将不胜感激。

===

注意:CATextLayer 不是支持我的 NSView 的图层的子图层。它支持我观点的图层类型。我通过在我的自定义 NSView 中覆盖 makeBackingLayer() 实现了这一点,如下所示:

override func makeBackingLayer() -> CALayer {
  return CATextLayer()
}

我把它包括在内,以防它有某种相关性。

虽然您可以将您为 CATextLayer 设置的文本视为该图层的 content,但这并不意味着它就是驻留在contents 属性 该层。事实上,我很确定 contents 属性 的 CALayer 只能是图像(或 nil)。如果该值为 nil,则您为 contentsGravitycontentsRectcontentsCenter 设置的值 - 所有这些值都在此 contents 属性 上运行 - 将什么都不做。

我的猜测是您的文本层的 contents 属性 为 nil(并且无论您设置什么文本值都将保持为 nil),这就是为什么什么都没有发生的原因。