我已经在很多地方读过Cocoa AutoLayout中的约束作用于所讨论的控件/视图的视觉界限,所以下面是令人困惑的(2me):
在Xcode IB中,我将两个(push button
)按钮添加/拖动到视图(一个在另一个下面)并约束它们使得它们之间的垂直距离为零。我希望两个按钮在垂直方向上相互齐平。
结果是两个按钮在它们之间具有小的差异/空间,可以通过视觉验证或通过查看Xcode中的对齐矩形值来验证。在这种情况下,它们之间的额外距离似乎是1点。
下面是简单视图层次结构中约束的屏幕截图:
此外,确认上述内容后,当您将约束中的常量更改为-1时,两个按钮会显示为彼此齐平。
以上是OS X 10.10(Yosemite)。
奇怪的是,在我的实际应用中(以上只是SO问题的测试用例)当我垂直堆叠多个NSButton
时(编程而不是IB)我需要提供-4.0之间的约束它们(与上面的-1.0相对)使它们齐平。此按钮的bezelStyle如下(Swift):
self.bezelStyle = NSBezelStyle.RoundedBezelStyle
[虽然没有意义,但如果需要使它们均匀-1.0,我会更舒服!]
更新I:
我想我已经找到了为什么我的应用程序与测试示例的行为不同。我在代码中使用了NSBezelStyle.RoundedBezelStyle
并将其高度设置为24.0;各种事情都指向这个按钮样式/类型需要有一个固定的高度(参见IB高度参数灰色并固定在21.0并且无法更改!)24和21之间的差异是3.0,这正是我们所看到的是主要应用约束的差异-4.0相对于其他例子要求-1.0
故事的寓意:不要在需要可变高度的某些使用场景之外使用RoundedBezelStyle
! PostScript:RoundedRectBezelStyle似乎遭受了同样的弊病!
仍然存在这样的问题:为什么测试示例中的某些按钮不是齐平的,需要-1.0的约束......
更新II:
进一步测试表明,根据我选择的按钮的“类型”,我会得到不同的结果。在代码中,这将链接到按钮的bezelStyle
属性。
修订问题(根据我的发现):
以上是故意的Apple(有一些逻辑/理性的解释)还是他们的错误? 如果上述情况属实,那么编写我的用户界面(类似电子表格的网格)以及如何布置我的视图的内置“齐平”的软件是不好的做法吗?
答案 0 :(得分:1)
视图如何根据视图的界限来确定视图本身。
你所看到的是按钮的样式没有覆盖自动布局设置的整个框架。这是正确的行为。