6

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

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

我也不能把它们拿走(我可以转换为“用户”约束,然后删除,但界面生成器只会再次用相同的约束替换它)。

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

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

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

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

我能做些什么?我知道我可以只创建两个 nib 文件(适用于 iPhone 5 和其他 iphone),但是当我想要在我转动手机风景时自动让步时怎么办?

谢谢你的帮助

4

3 回答 3

7

如果这样做会留下足够的约束来完全确定任何界面小部件的大小和位置,则不能在 Interface Builder 中删除约束。

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

    我已经设置了高度和宽度,并将其定位在视图的底部(它“点击”到位)。界面生成器如何将顶部空间添加到将其置于该高度的约束(iphone 5)。因此,如果我在 iPhone 4 上查看它,它不会向上移动(正如我所料,因为我将它“卡入”到屏幕底部的位置)而是切断了底部。

    选择视图并选择 Editor > Pin > Bottom Space to Superview。现在你有比你需要的更多的约束:高度、宽度、确定水平位置的东西(你忘了提到)、超级视图顶部的引脚和超级视图底部的引脚。因此,您现在可以删除顶部的图钉。

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

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

于 2012-11-18T20:43:11.953 回答
0

对我来说不明显的是,如果它更值得麻烦的话,你可以在每个 nib 文件的基础上关闭这个新功能。

选择 nib 文件并选择文件检查器(视图->实用程序->显示文件检查器)并取消选择“使用自动布局”。

于 2013-01-28T21:44:35.910 回答
0

如果您在不同的屏幕尺寸上遇到此问题,它在 iPhone 5 屏幕上构建良好但在 iPhone 4 屏幕上构建良好,反之亦然,一种解决方案是关闭违规视图的“自动调整子视图”选项,然后单击窗口右下角的按钮显示您的故事板/笔尖,它可以更改屏幕尺寸并确保两种屏幕尺寸的一切看起来都很好。当我用代码构建所有东西并避免像这样的 IB 怪事时,这只是让我高兴的另一件事。

于 2013-07-05T17:33:07.880 回答