跨视图层次结构实施自动布局约束

时间:2014-03-26 09:18:48

标签: objective-c xcode autolayout nsview nslayoutconstraint

我有两个按钮,我希望保持相同的大小,但问题是它们有两个不同的父视图。 Autolayout似乎忽略了这种情况下的“相等大小”约束。使用相同父视图的约束按钮可以正常工作。

我创建了一个非常简单的例子来描述我所看到的:

Constraints for One and Two Constraints for Three

从上面可以看出,按钮 Two Three 都设置为与按钮 One 具有相同的大小约束。唯一的区别是按钮 Three 包含在另一个NSView中。没有宽度约束链接按钮 Three 及其包含视图。

然而,当我运行并调整窗口大小时,它看起来像:

Running app

使用Interface Builder布局无关紧要,或使用-[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]方法在代码中执行此操作。

我错过了什么? Autolayout不支持这个吗?非常感谢。

已编辑:添加了屏幕截图以指示按钮三个的约束。

1 个答案:

答案 0 :(得分:1)

这应该可行。我设置了一个示例项目来做同样的事情。我有三个按钮,在按钮1和按钮2之间具有相等的宽度约束。然后在按钮2和按钮3之间相同。按钮1相对于它的父视图具有后缘约束。

enter image description here

请注意,在第二个和第三个按钮之间,Interface Builder不允许我在主窗口中执行此操作。相反,我必须使用左侧的文档列表来完成它。

结果如下:

enter image description here

这是项目的链接:

https://github.com/MaxMacleod/ThreeButtonConstraintTest1

一些警告。首先,这是一个iOS而不是一个OS X项目(我是一个iOS人!)。但原则应该是相同的。其次,这并不能确定您的项目无法正常工作的确切原因。但是,如果您可以比较此示例项目与您的项目对比,我们可以解决这个问题。然后我会更新这个答案。更好的是,如果你能让你的项目可用,我很乐意看看。