ios - 使用 AutoLayout 在 UIScrollView 底部查看

标签 ios swift autolayout constraints

我正在使用自动布局在 ScrollView 中设置内容。 ScrollView 中的对象从上到下固定到前一个对象,因此它们位于彼此之下。我在末尾添加了一个页脚 View ,位于这些对象下方。

注意事项:当内容很少时,contentView 将小于屏幕高度,因此页脚 View 将出现在屏幕中间的某个位置(这是正常行为)。但我想防止这种情况发生,并使 View 停留在底部的某个位置。

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

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

以一种始终满足两个约束的方式:

  • 如果内容的高度大于屏幕,则向下滚动后 View 出现在底部
  • 如果高度较小,则 View “固定”到屏幕底部,在内容底部和该 View 顶部之间留出相对较大的空间

如何使用 AutoLayout 实现这一点?

最佳答案

仅使用自动布局相当容易...无需代码。

关键是使用“内容 View ”来保存元素,并在“底部”元素和“页脚” View 之间使用大于或等于约束。

在这张图片中,黄色是主视图,绿色是 ScrollView ,蓝色是内容 View ,标签是灰色的,页脚 View 是粉红色的。

enter image description here

  • 从一个全新的 View Controller 开始
  • 添加一个 ScrollView ,普通约束(我一直使用20,所以我们可以看到框架)
  • 向 ScrollView 添加一个 UIView - 这将是我们的“内容 View ”
  • 将 contentView Top/Bottom/Leading/Trailing 都限制为 0 到 scrollView
  • 将 contentView 的 Width 和 Height 都限制为等于 scrollView
  • 添加你的元素——这里我使用了 3 个标签
  • 像往常一样限制标签...我使用:
    • LabelA - 顶部/前导/尾部均在 20,与 LabelB 的垂直间距为 60
    • LabelB - 前导/尾随 20,与 LabelC 的垂直间距为 60
    • LabelC - 在 20
    • 处领先/落后
  • LabelC 也设置为 Number of Lines: 0 因此它将扩展为多行文本
  • 添加一个 UIView 作为“页脚 View ”(我在其中贴了一个标签)
  • 将 footerView 的 Leading/Trailing/Bottom 都限制在 20(以便我们可以看到框架)
  • 要么在 footerView 上设置高度限制,要么使用其内容来限制其高度
  • 将 LabelC 的 Vertical Spacing 约束添加到 footerView,并将其设置为 >= 40
  • 最后一步,修改contentView的Height约束为Priority: 250

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

结果:

enter image description here enter image description here enter image description here

关于ios - 使用 AutoLayout 在 UIScrollView 底部查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50847601/

相关文章:

objective-c - UIViewController 可以推送 UITabBarController 吗?

IOS Firebase 后台获取

ios - 如何使用自动布局设置 tableHeaderView (UITableView) 的高度?

iOS - 针对 imageView 上按钮的不同屏幕尺寸的自动布局缩放

iphone - 在iOS App中执行Google身份验证后如何进行

ios - 仅将 pod 的子集用于子目标

ios - 尽管指示成功,但 UIDocument 未保存到文件

ios - 更新 UI 时在异步调用中保留循环

ios - UIProgressView 作为健康栏并在按下按钮时更新。 swift

ios - 如果我在运行应用程序时使用 IBDesignable 文件,为什么自动布局不会更新?