无法自动调整自动布局和堆栈视图(Swift 3,Xcode 8)

时间:2016-08-12 04:37:22

标签: ios swift xcode ios10 xcode8-beta4

我是iOS开发的新手,所以我很自然地在Xcode中遇到了堆栈视图和自动布局限制的问题。最初我只使用了约束和pin菜单来对齐所有内容,但我真的试图让堆栈视图失效,所以我回去实现它们。

App Interface

如果您查看我上面的图片,您会在我的应用中看到我创建了几个堆栈视图:

  • 状态栏垂直堆栈
  • 第1节垂直堆栈
  • 第一个分隔符(只是一个高度为0.5且不在堆栈内的视图)
  • 第2节,其中包含主垂直堆栈视图内的2个水平堆栈
  • 第二个分隔符(与第2节和第3节之间的第一个分隔符完全相同)
  • 第3节包含主垂直堆栈内的垂直堆栈和水平堆栈

所有这些堆栈加上2个分频器在一个称为用户界面的超级垂直堆栈中组合在一起。

我的一个问题是我无法在我的堆栈和分隔符之间设置顶部和底部约束。就目前而言,我喜欢的部分和分隔符之间有太多的空间。如果您查看图像1,我尝试在第1部分和状态栏之间设置15的顶部约束。我还试图在我的第一个分隔符和第一个分区之间设置一个15的顶部约束,依此类推。我遇到了相互矛盾的约束,我无法弄清楚原因。他们所说的只是Section1.top = Status Bar.bottom + 151st Divider.top = Section1.bottom + 15等。 关于如何解决冲突的任何想法?每当我尝试移动一个分隔线时,它会在原来的位置快速回弹,调整约束数会给我带来同样的错误。

我的第二个问题是,我无法让用户界面适应它的超级视图。我希望我的应用程序适合所有iPhone屏幕尺寸,并相应地自动调整。我尝试做的是使用引脚菜单并固定我的用户界面堆栈的每一边约束为0(未选中边界限制) 。用户界面是对齐的,没有任何冲突但是我的所有堆栈都被压缩,如图2所示。这导致一些错误,说我的标签的某些高度和垂直位置是不明确的:

  • Height and vertical position are ambiguous for "Bill Amount Text Field".
  • Height is ambiguous for "BILL AMOUNT".
  • Height and vertical position are ambiguous for "Tip Percent Segment Control".

随着更多标签被挤压,当您向下移动屏幕尺寸时会出现更多错误。我已经为每个标签设置了单独的顶部和底部约束。即使我为每个标签实现了设置高度,错误消息也会消失,但并非所有标签都出现在其堆栈中。我尝试使用Alignment and Distribution菜单并为我的堆栈选择不同的菜单,但似乎没有一个能解决这个问题。

任何帮助都将不胜感激,或者如果我发现这一切都错了,请告诉我。我正在使用Xcode 8 beta 4并在Swift 3.0中编写应用程序。

2 个答案:

答案 0 :(得分:-2)

请参阅此documentation - 对所有自动布局概念有非常明确的解释。
我认为你的问题是你使用一个大的堆栈视图,其中每个元素按比例填充其他元素。试着解决这个问题。

一个小建议,堆栈是非常好的,但你不应该滥用它:)

答案 1 :(得分:-5)

TL; DR;

根据我的经验。停止使用Interface Builder并在代码中创建所有视图。使用new anchor systemSnapKit这样的框架非常简单。您获得的好处:

  • 更快的发展(经过一段时间的练习)
  • Interface Builder
  • 没有愚蠢的警告
  • 在团队中工作时更容易合并
  • XCode几乎从未崩溃

我和IB战斗了几个月,现在我很开心。 祝你好运。