在界面构建器中使用约束

Tho*_*son 6 iphone interface-builder

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

我不能自己添加它们 - 界面构建器似乎认为它最了解.

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

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

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

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

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

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

谢谢你的帮助

mat*_*att 7

如果这样做会留下不足以完全确定任何接口窗口小部件的大小和位置的约束,则无法在Interface Builder中删除约束.

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

    我已经设置了高度和宽度,并将其定位在视图的底部("点击"到位的位置).接口构建器如何添加一个Top空间来约束它将它放在那个高度(iphone 5).因此,如果我在iPhone 4上查看它并没有让步(正如我所预料的那样,因为我将它"啪"地移动到屏幕底部),而是切断了底部.

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

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

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