2

我的 UI 中有一行,由固定大小的字符串 (FS)、固定大小的图像和可变大小的字符串 (VS) 组成。我需要这条线在它的超级视图中居中,如果它不再适合它,可能会截断 VS。就像启用截断的简单居中 NSTextField 一样。但是 NSTextField 不能保存 NSI​​mage AFAIK。

我想 NSStackView 应该能够做到这一点。我已经将它设置为在它的超级视图中居中,并且里面有一个 NSTextField、NSImage 和 NSTextField。但是当我将 VS 设置为非常长的值时,FS 和 VS 都会被推出超级视图边界并被剪裁。

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

到目前为止我已经尝试过:

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

  3. 使用 NSView - 它需要我设置 x 位置,所以它没有正确居中。

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

感谢您的任何想法,

J。

4

1 回答 1

2

听起来您没有限制堆栈视图以适应其容器。除了居中约束,还需要设置它的前导大于或等于父视图的前导,其尾随小于或等于其父视图的尾随。

FS 和 image view 的抗压缩性应该高于 VS 的抗压缩性,甚至可以要求防止这两者被压缩。

堆栈视图的水平削波阻力应高于 VS 的压缩阻力。可以将其保留在要求的位置。您希望 VS 被压缩而不是被剪裁。

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

于 2017-03-27T18:34:16.017 回答