UIScrollView 内容大小固定为 600x600(Main.storyboard 大小)

UIScrollView content size fixed to 600x600(Main.storyboard size)

过去 2 周我一直面临这个问题,但尚未找到解决方案。

我在存在问题的应用程序中使用 UIScrollview。 通常在我的应用程序中,有不同大小的动态文本和图像将来自网络服务。例如,想象一下 Facebook Newsfeed。我的应用程序类似于 Facebook 新闻源。有时,只有文字,有时会有文字和图像。以及对此 post.

的评论

正如我在许多链接中看到的那样,我遵循的层次结构是 SuperView-->UIScrollView-->Content View 并且元素放置在该内容视图中.我正在将 ContentView 中的元素的约束分配给 SuperView(ContentView --- constraints -- SuperView)。当视图中的内容超过父视图的大小时,它必须滚动。但是当我们设计为 W any x H any 大小时,scrollview 内容大小被限制为 600x600 的大小,即在 main.storyboard 中。我看过很多教程并搜索过很多网站。但是跟随他们并没有让我走运。

任何帮助都是可观的。

只需将您的 UIScrollView 添加到情节提要中的 UIViewController 视图,并在界面构建器中添加适当的约束。

然后,在代码中构建您的内容视图并为其提供您想要的任何框架,现在开始将您的控件添加到该内容视图并计算每个控件的大小(尤其是高度),最后您拥有控件的总高度。

现在设置内容视图的框架以匹配该高度并将其作为子视图添加到滚动视图,然后在代码中设置内容大小,如下所示:

_scrollView.contentSize = contentView.frame.size;

另一个注意事项,这样做是为了改变 viewDidLayoutSubviews 中的尺寸,以避免不同屏幕尺寸的任何问题,但要小心,这个事件被调用了很多次,所以有一个 BOOL 或其他东西来确保创建视图的代码并将其添加到滚动视图中执行一次,例如像这样

- (void)viewDidLayoutSubviews {
     [super viewDidLayoutSubviews];
     if (! built) {
         // Do everything I explained above here

        built = YES;
        [self.view layoutSubviews];
     }
}

以下是如何在 Interface Builder 中从头开始设置一个与 Auto Layout 一起使用的滚动视图。

  1. 从一个新的 ViewController 开始。拖出一个 scrollView,使其充满视图。取消选中 Constrain to margins 并将此 scrollView 的左、上、右和下边缘约束到其父视图的左、上、右和底部,偏移量为 0。这允许scollView 以任何方向填充任何设备上的屏幕。如果你愿意,你可以让你的 scrollView 占用更少的屏幕,只要确保它完全受限即可。

  2. 向您的 scrollView 添加一个视图。这应该是您的 scrollView 上唯一的顶级视图,它将作为您的 contentView。

  3. 将这个contentView的左上右下边缘约束到scrollView的左上右下,偏移量为0,此时会看到警告关于模棱两可的内容大小。那是因为你还没有告诉它你的内容视图有多大。

  4. 要调整 contentView 的大小,请向 contentView 添加宽度和高度约束。如果你想让它滚动,宽度和高度必须大于 scrollView 本身的宽度和高度。如果只想垂直滚动,请将 contentView 的宽度设置为等于 scrollView 的宽度。为此,在 Document Outline 视图中,control - 从 contentView 拖动到 scrollView 并 select 弹出窗口中的等宽

  5. 如果您希望能够通过代码更改 contentView 的高度(以考虑动态内容),请首先通过 control[= 为您的 contentView 创建一个高度约束48=]-在 contentView 中拖动并从弹出窗口 selecting Height。通过 control 创建高度约束的 IBOutlet - 从高度约束(在 Document Outline 视图中找到)拖动到您的 ViewController的代码。给插座起一个像 scrollViewHeight 这样的名字然后当你需要改变 scrollView 的高度时用像 scrollViewHeight.constant = 2000 这样的值设置高度。