在界面构建器中使用约束

时间:2012-10-22 13:44:21

标签: iphone interface-builder

所以,我无法理解界面构建器中的约束。

我无法自己添加它们 - 界面构建器似乎认为它最了解。

我也不能把它们带走(我可以转换为“用户”约束,然后删除,但是接口构建器只会用相同的约束替换它)。

我认为约束应该可以帮助您改变布局和各种类型 - 即为iPhone 5和早期版本构建视图。此外,从纵向模式切换到横向模式。

我似乎无法让它工作。如果我添加一个视图并将其放在superview顶部下方,那么它将设置Top space to:约束。这将是一个像素值,这意味着当我在较短的iPhone 4上观看时(或者如果手机转动风景),这些元素不会自动向上移动。

例如,我正在尝试创建一个自定义键盘视图 - 类似于您在收银机上看到的视图。我已经创建了一个自定义的UIView子类,现在我已经将UIView放入了界面构建器中。我已经设置了高度和宽度,并将其定位在视图的底部(“点击”到位的位置)。界面构建器如何添加Top space to约束将其置于该高度(iphone 5)。因此,如果我在iPhone 4上查看它,它就不会让步(正如我所预期的那样,因为我将它“啪”地移到了屏幕底部),而是切断了底部。

这不是我想要的,但是(如上所述)我不能删除约束。

我该怎么办?我知道我可以创建两个nib文件(适用于iPhone 5和其他iphone)但是当我转动手机景观时我想要自动预测的内容呢?

感谢您的帮助

3 个答案:

答案 0 :(得分:7)

如果这样做会使不足以确定完全任何界面小部件的大小和位置,则无法在Interface Builder中删除约束。

  • 一种解决方案:添加更多约束,直到大小和位置超定。然后,您将能够删除其中一个多余的约束。例如,您举了这个例子:

      

    我设置了高度和宽度,并将其定位在底部   视图(在其中“点击”到位)。界面构建器的添加方式   一个顶部空间来限制将它放在那个高度(iphone 5)。因此,如果   我在iPhone 4上看到它并没有让步(正如我所料,正如我所说的那样)   将其“啪”一声“放在屏幕底部”,而是削减   从底部开始。

    选择视图,然后选择编辑器> Pin>超级视图的底部空间。现在你有比你需要的更多的约束:高度,宽度,决定水平位置的东西(你忘了提到),以及超视图顶部的一个引脚和超视图底部的一个引脚。因此,您可以现在将引脚删除到顶部。

  • 另一种解决方案:删除代码中不需要的约束。约束是一个普通的接口对象,因此您可以创建一个插座并在代码运行时将其删除。但是,如果你这样做会使大小或位置不确定,你将得到不可预测的结果(“模糊布局”),所以要小心。

  • 还有另一种解决方案:降低IB中不需要的约束的优先级。 Interface Builder将确保绝对确定所有值。但也许您知道,例如,superview将改变大小,因此Interface Builder创建的一些约束将是不合需要的。您无法删除它们,但可以降低其优先级。因此,在您的示例中,最终可能会有一个顶部的引脚和一个底部的引脚,但您可以将引脚的优先级降低到顶部。

答案 1 :(得分:0)

对我而言,显而易见的是,如果它的价值更高,你可以在每个nib文件的基础上关闭这个新功能。

选择nib文件并选择文件检查器(View-> Utilities-> Show File Inspector)并取消选择“Use Autolayout”。

答案 2 :(得分:0)

如果您在不同的屏幕尺寸上遇到此问题,可以在iPhone 5屏幕上正常使用,而不是在iPhone 4屏幕上或反之亦然,一个解决方案是关闭违规视图的“自动调整子视图”选项然后单击窗口右下角的按钮,显示改变屏幕大小的故事板/笔尖,并确保两种屏幕尺寸的一切正常。当我用代码构建所有内容并避免像这样的IB奇怪时,这些事情中的另一个让我开心。