如何使NSStackView截断最右边的NSTextField

时间:2017-03-27 16:40:37

标签: cocoa nstextfield nstextview nsstackview

我的UI中有一行,包括固定大小的字符串(FS),固定大小的图像和可变大小的字符串(VS)。我需要将这一行置于其超级视图中,如果它不再适合,可能会截断VS.就像启用截断的简单居中的NSTextField一样。但NSTextField无法持有NSImage AFAIK。

我想NSStackView应该能够做到这一点。我把它设置为以superview为中心,并在里面有一个NSTextField,NSImage和NSTextField。但是当我将VS设置为很长时间时,FS和VS都被推出超视图范围并被剪裁。

有没有办法告诉NSStackView永远不会将FS移出超级视图边界而是截断VS?或者还有其他技术可以实现我的目标吗?

到目前为止我尝试过:

  1. 使用NSStackView并在VS上将compressionResistance设置为499 - 无效
  2. 使用NSTextView - 无法截断文本并适合单行。也似乎是一种矫枉过正的

  3. 使用NSView - 它需要我设置x位置,因此它不正确 居中。

  4. 我可以使用NSView并计算字符串的大小并修改约束以使其工作。但我认为必须有更好的方法。

    感谢任何想法,

    学家

1 个答案:

答案 0 :(得分:2)

听起来你没有约束堆栈视图以适应它的容器。除了居中约束之外,您还需要将其前导设置为大于或等于超级视图的前导及其尾部小于或等于其超级视图的尾随。

FS和图像视图的抗压强度应高于VS的抗压强度,甚至可能需要防止这两者被压缩。

堆叠视图的水平限幅电阻应高于VS的压缩电阻。可以根据需要保留它。你希望VS被压缩而不是剪裁。

VS的抗压力实际应该取决于视图层次结构和约束的其余部分。它应该小于490(NSLayoutPriorityDragThatCannotResizeWindow),因此它不会强制窗口调整大小。