关于Xcode 6约束的清晰度

时间:2014-09-27 04:11:20

标签: xcode interface-builder ios8 constraints

我有一个应用程序,我正在从iOS 7更新到8,并试图利用Apple现在提供的新尺寸类。我似乎遇到很多麻烦的一件事是约束系统是如何工作的。我已经完成了一些教程并查看了其他帖子,但事情似乎仍然对我有利。

首先,我将解释我的文件结构以及提供一些图像,以防万一我不清楚我的内容。

我的视图控制器设置如下:

查看控制器 视图    导航栏    键盘避免滚动视图(UIScrollView)       视图          什么样的(儿童观)          NameOFBill          AmountOwedView          OptionalView          ReminderView          保存 以下是该结构的屏幕抓取:enter image description here

对于我的约束,我将导航栏和键盘避免(UIScrollView)设置为0左上角和右下角。见下图。 enter image description here

到目前为止,一切进展顺利。 Xcode不会抱怨任何遗漏。

接下来是scrollView中的View,我将其用作scrollView中所有内容的容器。当我尝试重复这个过程时,我得到一些约束警告......但为什么呢?我在左上角和右上角给了它一个约束,为什么Xcode不足以知道它应该如何和高。似乎想要视图的宽度和高度。如果我设置宽度购买,那么它假设宽度为600,这对于任何iPhone来说都太宽了。

我确定我的想法在某个地方不正确..我只是不知道在哪里以及为什么。我真的想了解这个系统是如何工作的,所以任何见解都会有所帮助

谢谢!

**更新**

这是检查员的样子 :enter image description here

这就是Xcode抱怨的内容  enter image description here

2 个答案:

答案 0 :(得分:2)

在约束方面,

UIScrollView是一个特例。对UIScrollView的直接子节点的约束实际上设置了滚动视图的contentSize。它实际上非常强大,因为它意味着你可以用UIView填充东西,只要你已经适当地设置了所有约束,它就会自动设置UIScrollView的contentSize,而不必做任何事情。在代码中。如果您没有将子UIView固定到每个方向的滚动视图的约束,那么您将收到“模糊的可滚动内容”警告,因为这就是它如何计算出contentSize的内容。

但是,这意味着您不能指望固定在UIView左侧和右侧的子UIScrollViewUIScrollView的宽度相匹配,因为默认宽度由它的内容决定。

然而,有一种解决方法。您可以在Interface Builder中选择UIScrollViewUIView,并添加“Equal Widths”约束。这将绕过contentSize的设置,实际上将UIView的宽度与UIScrollView的帧宽相匹配。

希望有所帮助。

答案 1 :(得分:0)

你可以解决" Misplaced Views"选择视图并按Command + Option + =进行警告。这会更新视图的帧以匹配它具有的约束。该警告基本上表示视图的约束不会像界面生成器中那样出现它的框架。

"可滚动内容大小模糊"消息可能是由于滚动视图中的视图缺少一些约束。如果IB无法确定应放置这些视图的位置,则无法正确设置滚动视图的contentSize。浏览滚动视图中的视图,确保它们不会错过任何约束。

编辑:

在下面的屏幕截图中,您可以看到如何更新视图的帧(与按下Command + Option + =相同),或者执行相反的操作:根据IB中视图的当前位置更新约束。尝试点击"更新约束" (或者甚至"重置为建议约束")如果您认为您的视图在IB中正确定位,并且您希望约束与该定位匹配。

screenshot