gpt4 book ai didi

cocoa - 为什么两个按钮之间的距离为零,而不是齐平?

转载 作者:行者123 更新时间:2023-12-03 16:21:18 24 4
gpt4 key购买 nike

我在很多地方读到,Cocoa AutoLayout 中的约束作用于相关控件/ View 的视觉边界,因此下面的内容令人困惑(2me):

在 Xcode IB 中,我将两个(按钮)按钮添加/拖动到 View (一个在另一个下面)并约束它们,使它们之间的垂直距离为零。我期望两个按钮在垂直方向上彼此齐平。

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

taken in Xcode 6

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

view hierarchy and constraints

进一步确认上述情况,当您将约束中的常量更改为 -1 时,两个按钮将显示为彼此齐平。

buttons with vertical difference of -1.0

以上是在 OS X 10.10 (Yosemite) 上进行的。

更奇怪的是,在我的实际应用程序中(上面只是 SO 问题的测试用例),当我垂直堆叠许多 NSButton (以编程方式而不是通过 IB)时,我需要提供一个约束它们之间的 -4.0(与上面的 -1.0 相反)使它们齐平。该按钮的 bezelStyle 如下(Swift):

        self.bezelStyle = NSBezelStyle.RoundedBezelStyle

[虽然没有意义,但如果统一为 -1.0 才能使它们齐平,我会舒服得多!]

更新一:

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

这个故事的寓意:除了需要可变高度的某些使用场景之外,不要使用 RoundedBezelStyle! PostScript:RoundedRectBezelStyle 似乎也有同样的毛病!

这仍然留下了一个问题:为什么测试示例中的某些按钮与所需的 -1.0 约束不齐平......

更新二:

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

  1. 渐变按钮与按钮之间的零约束齐平
  2. 纹理按钮似乎需要按钮之间有 +1.0 约束以避免重叠
  3. 大多数其他按钮(尤其是那些具有圆形边框样式的按钮)似乎需要在它们之间设置 -1.0 的约束才能齐平

修改后的问题(根据我的发现):

上述内容是苹果公司有意为之(是否有一些逻辑/合理的解释)或者它们是错误吗?如果上述情况属实,那么使用这些胡编乱造的代码来编写我的用户界面(类似电子表格的网格)以实现我如何布局 View 的“齐平性”是一种不好的做法吗?

最佳答案

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com