让 UIScrollView 与 AutoLayout 一起工作

Posted

技术标签:

【中文标题】让 UIScrollView 与 AutoLayout 一起工作【英文标题】:Getting UIScrollView to work with AutoLayout 【发布时间】:2013-11-11 04:07:12 【问题描述】:

这似乎是一个很常见的问题,但无论我进行哪段代码或更改,我都无法让它工作。我正在研究一个非常简单的示例。

故事板设置为 4" 纵向。UIScrollView 320px 宽 x 440px 高。它包含一个 320px 宽 x 900px 高的 UIView。应用程序仅锁定为纵向,但需要在 3.5" 和 4" 屏幕上工作。

我需要做什么才能让 UIView 在 UIScrollView 中垂直滚动?我需要设置一个约束吗? Clip Subviews 和 Autoresize Subviews 应该设置为什么,它有什么不同吗?应该将查看模式设置为什么,它有什么不同吗?我是否需要以编程方式重置 UIScrollView 的 ContentSize?如果是这样,这是否在 ViewDidLoad 事件中完成?

我尝试向 UIView、UIView 的底部元素和 UIScrollView 本身添加垂直约束。我以编程方式设置内容大小以匹配 UIView。

我已经在各种其他工具中构建了 UI,这只是让我为如此简单的事情而发疯。如果我关闭自动布局,它可以正常工作,但这不是我正在寻找的解决方案。

【问题讨论】:

这可能有助于***.com/questions/12846351/… 【参考方案1】:

最终得到了这个答案。 https://***.com/a/16029013/1342779

特别是我在 viewDidLoad 方法中的代码:

[_scrollView addConstraint:[NSLayoutConstraint constraintWithItem:_innerView
                                                           attribute:NSLayoutAttributeBottom
                                                           relatedBy:NSLayoutRelationEqual
                                                              toItem:_scrollView
                                                           attribute:NSLayoutAttributeBottom
                                                          multiplier:1.0
                                                            constant:0]];

【讨论】:

【参考方案2】:

看看this video。此外,您也可以尝试设置滚动视图的内容大小。

// For verical scrolling
scrollView.contentSize = CGSizeMake(viewToScroll.width, viewToScroll.height * numberOfPages);

// For horizontal scrolling
scrollView.contentSize = CGSizeMake(viewToScroll.width * numberOfPages, viewToScroll.height);

【讨论】:

以上是关于让 UIScrollView 与 AutoLayout 一起工作的主要内容,如果未能解决你的问题,请参考以下文章

如何让 UIScrollView 滚动

如何在特定点停止 UIScrollView?

拖动时如何让 UIScrollView 离开屏幕

如何让 UIScrollView 忽略单次触摸?

UIScrollView 并不总是滚动让我发疯

让 UIView 填充 UIScrollview