2012-10-22 31 views
6

因此,我无法在界面构建器中解决约束。在界面构建器中使用约束条件

我无法自己添加它们 - 界面生成器似乎认为它最好。我也不能把它们拿走(我可以转换为“用户”约束,然后删除,但界面生成器将只是用相同的约束再次替换它)。

我认为约束条件应该可以帮助您改变布局和各种方式 - 即构建iPhone 5及更早版本的视图。此外,从肖像模式转到横向模式。

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

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

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

我该怎么办?我知道我可以创建两个nib文件(适用于iPhone 5和其他iphones),但是当我打开手机风景时想让事情自动生效时,该怎么办?

感谢您的帮助

回答

7

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

  • 一种解决方案:添加更多的约束,直至大小和位置是超定。您将可以删除其中一个多余的约束。例如,你举了这个例子:

    我已经设置了高度和宽度,并将其定位在 视图的底部(“点击”到位)的底部。界面生成器如何添加 顶部空间约束把它放在这个高度(iphone 5)。因此,如果我在iPhone 4上查看它,它不会预算(因为我期望,因为我 “捕捉”到屏幕底部的位置),而是从底部削减 。

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

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

  • 另一种解决方案:降低IB中不需要约束的优先级。 Interface Builder将确保所有值都是绝对确定的。但是,也许你知道,例如,超级视图会改变大小,因此Interface Builder创建的一些约束条件将不受欢迎。您不能删除它们,但可以降低它们的优先级。因此,在你的例子中,最终可能会有一个针脚顶部和一个针脚底部,但你可以将针脚的优先级降低到顶部。

0

非明显,我的是,你可以把这个新的功能关闭在每个笔尖文件的基础上,如果它是更多的麻烦,这是值得的。

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

+0

问题是**使用** contstraints。我认为托马斯不会**真的想禁用它。 –

+0

这对我很有帮助,我认为这张票的作者也会觉得它很有用。你可以根据他写的文章说出自己对约束并不满意,宁愿不去约束他们,也不愿意让他们屈服。 – marfastic

0

如果您在不同的屏幕尺寸上遇到问题,它可以在iPhone 5屏幕上生成,但不在iPhone 4屏幕上,反之亦然,一种解决方案是关闭违规视图的“Autoresize Subviews”选项然后点击窗口右下角的按钮,显示您的故事板/笔尖可更改屏幕尺寸,并确保两种屏幕尺寸都一切正常。当我用代码构建所有东西并避免IB这样的怪事时,这些东西中的另一个让我感到高兴。