NSTextField sizeToFit 或 frame update shift text to left

NSTextField sizeToFit or frame update shift text to left

我对 NSTextField 上的 sizeToFit 方法有一个奇怪的问题。

我有一个 NSView,我正在其中创建一个 CALayer 和一个 NSTextField。我使用 sizeToFit 方法根据字段值调整 CALayer 的大小。它运行良好,但是当 我插入 space 时,文本在字段框架内向左 移动(见下图)。

图层和文本字段的框架都定位正确(原点未移动)。

如能提供任何线索,我们将不胜感激。

编辑 帧更新具有相同的行为,即使不使用 sizeToFit。

有时它会在插入 space 时移动,或者有时它会在插入 space 时返回到它想要的位置。

底层不会从它的原点移动。

编辑 看起来 NSTextField 的容器需要足够的 space 才能显示。 我发现它实际上需要很多 space。

我们无法访问 NSTextField 的容器,因此在调用框架更新或 [self sizeThatFits:stringSize];[self sizeToFit];

我认为-sizeToFit-方法没有必要。它会在布局执行时自动调用。如果您需要调整 NSTextField-实例的大小,将其子类化并覆盖 -intrinsicContentSize-方法。

我使用这种方法,在文本字段末尾使用 "fade out"-文本掩码。使用自动布局和固有内容大小,我的文本字段始终使用该掩码,即使在父视图上足以 space 进行布局。

- (CGSize)intrinsicContentSize
  {
   CGSize size=[super intrinsicContentSize];
   // adjust size somehow (or may be not)
   return(size);
  }

每次您需要 "update" 文本字段大小(打字时?),请调用 -invalidateIntrinsicContentSize