我在很多地方都读过,Cocoa AutoLayout中的约束作用于所涉及的控件/视图的视觉边界,因此以下内容令人困惑(2me):

在Xcode IB中,我将两个(push button)按钮添加/拖动到视图中(一个在另一个下面)并对其进行约束,以使它们之间的垂直距离为零。我希望两个按钮在垂直方向上彼此齐平。

结果是两个按钮之间确实存在很小的差异/间隔,可以通过视觉或通过查看Xcode中的对齐矩形值来验证它们。在这种情况下,它们之间的附加距离似乎是1点。



下面是简单视图层次结构中的约束的屏幕截图:



此外,确认上述内容后,将约束中的常数更改为-1时,两个按钮看上去彼此齐平。



以上是在OS X 10.10(优胜美地)上。

仍然很陌生,在我的实际应用中(以上只是SO问题的测试用例),当我垂直(通过编程方式而不是通过IB)堆叠许多NSButton时,我需要在它们之间提供-4.0的约束(与上面的-1.0)使它们齐平。此按钮的bezelStyle如下(快速):

        self.bezelStyle = NSBezelStyle.RoundedBezelStyle


[尽管没有意义,但如果要使它们齐平需要统一的-1.0,我会感到很舒服!]

更新一:

我想我已经找到了为什么我的应用程序与测试示例的行为有所不同的原因。我在代码中使用了NSBezelStyle.RoundedBezelStyle并将其高度设置为24.0;各种各样的事情都指向此按钮样式/类型,需要具有固定的高度(请参见IB,其中height参数显示为灰色并固定为21.0,并且无法更改!)24和21之间的差是3.0,这正是我们所看到的是主要应用程序约束-4.0与其余所需示例-1.0的区别

故事的寓意:不要在需要可变高度的某些使用场景之外使用RoundedBezelStyle! PostScript:RoundedRectBezelStyle似乎遭受了同样的疾病!

仍然留下了一个问题,为什么测试示例中的某些按钮未按要求为-1.0的约束冲洗?

更新二:

进一步的测试表明,根据选择的按钮的“类型”,我得到不同的结果。在代码中,这将链接到按钮的bezelStyle属性。


渐变按钮与按钮之间的零约束齐平放置
纹理按钮似乎需要在按钮之间需要+1.0约束以避免重叠
其他大多数按钮(尤其是具有圆形边框样式的按钮)似乎在它们之间需要限制为-1.0才能刷新


修订的问题(基于我的发现):

以上是苹果公司故意提供的(是否有逻辑/合理的解释),或者它们是错误的?
如果上述情况是正确的,那么用这些软糖对用户界面(类似于电子表格的网格)进行编码的做法是否明智,这是内置于如何布局视图的“冲洗性”的吗?

最佳答案

视图如何根据其边界进行布局取决于视图本身。

您所看到的是按钮的样式没有覆盖,而是通过自动布局设置了整个框架。这是正确的行为。

关于cocoa - 为什么两个按钮之间的距离为零而不是平齐?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27758400/

10-17 02:22