一个非常有用的指南是
- 每个元素都应该能够找出其位置(x和y)和大小(宽度和高度)。
- 确保每个元素只有一种方法来确定其位置和大小。
- 请记住,所有元素的自动布局都会相互影响。
最常用的布局限制是:
- 顶部视图顶部与另一个视图之间的空格。
- 尾随视图右边缘与另一个视图之间的空格。
- 前导视图左边缘与另一个
之间的空格
- 底部视图底边与另一个视图之间的空格
- 宽度为视图指定修复宽度(请注意,它也可以是百分比 - 宽高比)
- 高度为视图指定修正宽度(也可以是百分比)
- 水平居中始终将视图相对于另一个视图的水平中心对齐
- 垂直居中始终将视图相对于另一个视图的垂直中心对齐
例如,在第二张图片中,说黄色条是一个名为titleView的UIView。
- 通过将顶部布局约束设置为容器视图来设置titleView的位置。 y位置已设置。
- 将前导约束设置为容器视图。 x位置已设置。
- 将尾随约束设置为容器视图。视图的宽度现在将随屏幕大小而变化。 因此现在可以确定宽度。
- 将高度设置为50. 设置高度。
- 现在......如果您还设置了此视图的宽度,则会导致layoutConstraints中断,因为您已重新定义了宽度约束。然后会忽略一些约束。
layoutConstraints如何相互影响的另一个例子。让我们看看确定第二张图像的y位置。
- 假设titleView对容器的顶部约束+高度为50。
- currentCampaignView对titleView的底部有一个顶部约束。 (使用垂直间距)+与titleView相等的高度。 (y +高度可以计算)
- 5个按钮的高度相等。顶部按钮的顶部空间为currentCampaignView的底部。中央按钮的顶部空间位于顶部按钮的底部。底部按钮的顶部空间位于中央按钮的底部。
- startCampaignView与currentCampaignView具有相同的高度。顶部约束到底部按钮的底部,底部约束到容器视图。
请注意,由于视图和按钮具有相同的高度,因此在确定高度时都会考虑所有视图。因此,非常重要的是它们都是相互关联的,并且指定了可以使用的整个高度。在这种情况下,它由第一个元素titleView指定,该元素具有Container视图的顶部约束(其高度应该是已知的)和最后一个元素startCampaignView,它对Container视图具有Bottom约束。因为中间的所有视图都在y位置和高度上相关联,所以视图可以计算出每个视图的高度和y位置应该是什么。
又一个例子。 (你的第一张照片)
- topLeftButton 将顶部约束设置为Superview。 (y),将前导约束设置为Superview(x),设置高度= 100(高度),将等宽度设置为topRightButton(注意我们还没有宽度,因为无法确定topRightButton的宽度)< / LI>
- topRightButton 将顶部约束设置为Superview。 (y),topLeftButton的前导约束(将用于x),将尾随约束设置为superview。现在可以确定两个按钮的宽度,因为我们有一个外部startX + endX,我们知道这两个按钮相互接触并且宽度相等。因此,可用空间将被拆分以获得两个按钮的宽度。