使用AutoLayout在UIScrollView的底部查看

Coc*_*uts 9 constraints ios autolayout swift

我正在使用autolayout在滚动视图中设置内容.滚动视图中的对象从上到下固定在前一个对象上,因此它们位于另一个之下.我有一个页脚视图,最后添加到这些对象下面.

这里有一个问题:当内容很少时,contentView将小于屏幕高度,因此页脚视图将出现在屏幕中间的某个位置(这是正常行为).但我想阻止它,并使视图停留在底部.

换句话说,我想设置一个双重约束,如:

Put this view below all the objects in the scrollview 
AND
keep this view at a distance of max [some number] of the bottom of the screen
Run Code Online (Sandbox Code Playgroud)

在某种程度上,两个约束总是得到满足:

  • 如果内容的高度大于屏幕,则向下滚动后,视图将显示在底部
  • 如果高度较小,则视图被"固定"到屏幕的底部,在内容的底部和此视图的顶部之间留下相对较大的空间

如何使用AutoLayout实现这一目标?

Don*_*Mag 23

仅使用自动布局相当容易...不需要代码.

关键是使用"内容视图"来保存元素,以及greater-than-or-equal"底部"元素和"页脚"视图之间的约束.

在此图像中,黄色是主视图,绿色是滚动视图,蓝色是内容视图,标签是灰色,页脚视图是粉红色.

在此输入图像描述

  • 从一个全新的视图控制器开始
  • 添加滚动视图,正常约束(我一直使用20,所以我们可以看到框架)
  • 添加一个UIView到scrollView - 这将是我们的"内容视图"
  • 约束contentView Top/Bottom/Leading/Trailing都等于0scrollView
  • 约束contentView的宽度和高度等于scrollView
  • 添加你的元素 - 这里我使用了3个标签
  • 像往常一样约束标签......我用过:
    • LabelA - 顶部/前导/尾随全部20,与LabelB的垂直间距60
    • LabelB - 前导/尾随20,与LabelC的垂直间距60
    • LabelC - 领先/尾随 20
  • LabelC也设置为Number of Lines: 0使用多行文本进行扩展
  • 添加一个UIView"页脚视图"(我在其中粘贴了一个标签)
  • 约束footerView前导/尾随/底部全部20(所以我们可以看到框架)
  • 要么在footerView上设置高度约束,要么使用其内容来约束其高度
  • 从LabelC添加一个Vertical Spacing约束到footerView,并将其设置为 >= 40
  • 最后一步,将contentView的高度约束更改为 Priority: 250

现在,当您扩展/收缩LabelC的高度时,footerView将保持至少 40 磅的垂直空间.当LabelC变得足够大以"推"底部下方的footerView时,scrollView将变为可滚动.

结果:

在此输入图像描述 在此输入图像描述 在此输入图像描述

  • 神奇的答案,就像一个魅力;) 给那个人一瓶酒 (2认同)
  • 由精心制作的图像支持的教科书解释。太感谢了! (2认同)