NSTextField sizeToFit或帧更新将文本移到左侧

时间:2015-04-14 09:34:32

标签: macos cocoa resize nstextfield

我在NSTextField上遇到sizeToFit方法的奇怪问题。

我有一个NSView,我在这里创建了一个CALayer和一个NSTextField。我使用sizeToFit方法根据字段值调整CALayer的大小。效果很好,但是当我插入一个空格时,文字会在字段框架内左移(见下图)。

图层和文本字段的框架都定位良好(原点不移动)。

对此的任何线索都将受到高度赞赏。

text shift

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

有时它会在插入空间时移动,或者有时候在插入空间时会回到其想要的位置。

底层不会从其原点移动。

修改 看起来NSTextField的容器需要足够的空间来显示。 我发现它实际上需要很多空间。

我们无法访问NSTextField的容器,因此我在调用帧更新或[self sizeThatFits:stringSize];之前向字符串的宽度添加一个较大的值(取决于字体的大小){ {1}}。

1 个答案:

答案 0 :(得分:1)

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

我在文本字段的末尾用"淡出" -text掩码使用了这种方法。使用自动布局和内在内容大小,即使在父视图上有足够的空间进行布局,我的文本字段也始终使用该掩码。

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

每次您需要更新"文本字段大小(在输入?时),调用-invalidateIntrinsicContentSize