两个NSTextField在autolayout中具有相互依赖的宽度

时间:2013-09-25 04:01:02

标签: objective-c xcode cocoa autolayout nstextfield

我正在尝试将两个NSTextFields的简单情况放在一起,其中动态宽度和固定间距介于两者之间。虽然我无法找到一种有效的方法。

我希望得到这样的东西:

Goal

蓝色框是NSTextFields。当更多文本输入一个文本时,它应该增长,从而使另一个文本缩小,保持领先空间,尾随空格和字段之间的间距。如果两个字段都有太多文本,则第一个应该优先考虑。每个字段也明显具有可达到的最大和最小可能宽度。

Examples

我如何处理这个问题,最好尽可能多地利用IB自动布局?

3 个答案:

答案 0 :(得分:1)

在我看来,您提到的所有约束都直接转换为界面构建器 -

  1. 第一个视图的宽度为> =某事。
  2. 第一个视图的宽度为< = something
  3. 第二个视图相同。
  4. 视图之间的空间是固定的。
  5. 第二个视图希望尽可能小(宽度为0)但是它的优先级低于先前的约束,优先级低于内部内容大小约束。

答案 1 :(得分:0)

根据ilya的回答应用约束后,我必须添加到视图控制器的代码:

controlTextDidChange中(_controlWidthConstraint指的是输入的固定宽度约束;默认情况下,第二个输入可能为0):

// Get the new width that fits
float oldWidth = textControl.frame.size.width;
[input sizeToFit];
float controlWidth = textControl.frame.size.width;

// Don’t let the sizeToFit method modify the frame though
NSRect controlRect = textControl.frame;
controlRect.size.width = oldWidth;
textControl.frame = controlRect;

_controlWidthConstraint.constant = controlWidth;

答案 2 :(得分:0)

关键在于在输入文本时使文本字段的intrinsicContentSize无效。

您可以查看示例项目here,以便让您走上正确的轨道。