【问题标题】:UIScrollView - Need Constraints for x position/width, Need Constraints for y position/heightUIScrollView - x 位置/宽度需要约束,y 位置/高度需要约束
【发布时间】:2017-10-14 20:27:32
【问题描述】:

我有一个看起来像这样的视图层次结构(基于其他答案和 Apple 用于使用 UIScrollView 的高级 AutoLayout 指南):

ScrollView 所需的2 个步骤是:

  1. 为 ScrollView 的 positionsize(框架)设置约束:与任何其他视图相同。
  2. 内容大小设置约束:通过确保 ScrollView 的子视图的约束触及 ScrollView 的所有边缘(前导、尾随、顶部、底部),如果您正在这样做在界面生成器中,而不是以编程方式。

第 1 步起初运行良好,结果如下:

positionsize 没有问题,符合预期。我现在只需要在 Interface Builder 中使用 Step 2 定义内容大小(内容高度和内容宽度)。

现在我添加了触及 ScrollView 的所有 4 个边缘的约束,如下所示:

突然之间,ScrollView 不再知道它的 positionsize(帧)了。

我查看了其他答案并遵循了各个步骤,但似乎无法解决此问题。抱歉,由于隐私问题,我无法发布 Storyboard 屏幕截图

【问题讨论】:

    标签: ios objective-c uiscrollview autolayout


    【解决方案1】:
    1. 将滚动视图的顶部、底部、前导、尾随约束设置为 0。

    2. 设置滚动视图内部的视图,并将其顶部、底部、前导、尾随约束设置为 0。

    3. 选择滚动视图内的视图,转到尺寸检查器并将“固有尺寸”设置为“占位符”。

    【讨论】:

    • @ChrisAllinson 当您将内部大小设置为“占位符”时,您告诉 Xcode 布局系统您的视图大小取决于其内容
    【解决方案2】:

    滚动视图起初可能有点棘手。你真的有 3 个部分:

    1. 滚动视图的实际框架
    2. 滚动视图中包含的子视图的实际框架
    3. 滚动视图的 contentSize - 即它应该在任一方向滚动多远

    所以,1. 非常简单。

    第二部分看起来也很简单,只是我们倾向于将子视图“固定”到其父视图的内部边缘。在滚动视图子视图的情况下,那些约束定义了 contentSize。您必须确保子视图具有“大小”。

    从一个子视图开始,你会:

    1. 将滚动视图的约束设置为“正常”。
    2. 设置子视图的大小 - 仅用于演示目的,将其设置为 100 x 100
    3. 将子视图的所有四个边缘固定到滚动视图的四个边缘

    运行应用程序。假设您设置了背景颜色,因此您知道您在看什么,您应该看到滚动视图的位置和大小符合您的预期......您应该看到 100 x 100 的子视图位于滚动视图内的某个位置......并且您可能无法进行任何实际的滚动。

    如果您返回并将子视图更改为 100 x 800,并且仍然将其底部约束固定到滚动视图的底部(子视图的父视图),然后再次运行应用程序...您 应该能够上下滚动子视图的整个 800 pt 高度。

    思考的方式是:滚动视图的内容——无论是一个还是多个子视图——必须定义它的自己的大小,这将定义可滚动区域(滚动视图的contentSize)。

    希望这是有道理的!

    【讨论】:

    • 谢谢。没有明确定义 ScrollView 的子视图(我的通用 ContentView)的大小是导致问题的原因。我还必须明确定义该 ContentView 的所有子视图的大小
    猜你喜欢
    • 2016-06-08
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2014-08-22
    • 1970-01-01
    • 2019-10-01
    相关资源
    最近更新 更多