我应该使用视图约束还是最小窗口大小?

时间:2012-05-05 14:02:16

标签: xcode macos user-interface constraints nswindow

我正在制作一个在OS X上使用的应用程序,我注意到新的约束功能在Interface Builder中是多么有用(当然,它现在内置在Xcode中)。事实上,它是如此有用和动态,我在质疑我是否应该设置最小窗口大小,或者只是依靠窗口的约束来设置最小值和最大值。

我觉得OS X考虑了最小和最大窗口大小,除了以某种方式限制窗口大小之外的其他事项,并且为此设置最小值和最大值可能很有用,但我也觉得它依赖于约束来动态设置最小和最大窗口高度可能是好的风格,因为它们的动态行为和所有。例如,如果我决定使用约束更改控件的最小宽度,我不必担心也会更改最小窗口的最小宽度。

依赖约束设置最小和最大窗口大小的好处的另一个更重要的例子是,如果用户更改文本大小之类的内容,我的应用程序中受影响的控件可以动态更改其大小约束,但是静态设置的最小和最大窗口大小会破坏该动态行为。

再次考虑所有这些好处时,还应考虑到OS X可能会以某种方式考虑最小和最大窗口大小,并且因此设置最小值和最大值可能很有用;我只是不确定如果 OS X考虑到它们,如果它们这样做, 它会如何使用它们。

我查看了Apple的文档,找不到能提供令人满意答案的任何内容。

1 个答案:

答案 0 :(得分:2)

在这样的情况下,最好的办法就是自己尝试一下。使用单个窗口和一些控件创建一个新应用程序花了不到两分钟。如果您只想玩可调整大小的窗口,则根本不需要添加任何代码:

window 1

此窗口没有最小尺寸且没有约束,问题立即显而易见。您可以调整窗口大小,使其如下所示:

window 2

在按钮之间添加一些约束显示了约束提供的承诺。现在窗口看起来像是最小的尺寸:

window 3

标签上的一些限制最终给出了预期的结果:

window 4

这很好,但到达那里需要一些工作。我没有添加一套完整的约束 - 两个右手按钮之间的垂直约束是多余的,因为左边的按钮之间已经有一个。对于具有许多控件的窗口,设置足够的约束来覆盖所有视图可以是:a)非常有用和有价值,或者b)对接的痛苦和很少的额外价值。这取决于你的情况。一个更简单的方案是将可能重叠的控件的高度(两个按钮和标签)和它们之间的所需空间相加,然后将其设置为窗口的最小高度。

我可以看到这两种策略都很有用,具体取决于窗口内容。事实上,我认为它们根本不是两个独立的策略...设置最小窗口尺寸实际上只是你要添加的另一种约束。例如,可能有一个大小低于该大小的窗口看起来很傻或者不是很有用,因此您可以将最小窗口大小设置为这些尺寸。同时,您可能希望在按钮之间设置约束以防止本地化版本中的重叠控件(例如,德语名称往往会很长)。