是的,st3fan是对的,UIScrollView 的 contentSize 属性必须设置。但是您不应该为此目的关闭自动布局。您可以仅在 IB 中使用自动布局轻松设置 UIScrollView 的 contentSize,无需任何代码。
需要注意的是,在使用自动布局时 UIScrollView 的 contentSize 不是直接设置的,它是根据 UIScrollView 的所有子视图的约束来计算的。您所需要的只是为两个方向的子视图提供适当的约束。
例如,如果您只有一个子视图,您可以将其高度和空间从顶部和底部设置为超级视图(即我们的例子中的滚动视图) contentSize.height 计算为 sum
Vertical Space (aSubview.top to Superview.top) + aSubview.height + Vertical Space (aSubview.top to Superview.top)
contentSize.width 的计算方式与水平约束类似。
如果限制太少而无法正确计算 contentSize,则在 View Controller Scene 项附近显示红色小按钮,以告知布局歧义。
如果有很多子视图,那么它可能是约束的“链”:从顶部到顶部的子视图、子视图之间的高度和空间以及从底部到底部的子视图,就像在Danyal Aytekin的回答中一样。
但在实践中,在大多数情况下,只需添加一个具有所需大小的空视图并将 scrollView 的顶部、左侧、底部、右侧的空间设置为 0 会更方便。
您可以将此视图用作“内容视图”,即放置所有其他子视图或者如果您已经有很多子视图并且不想移动它们并再次设置布局,您可以将此辅助视图添加到现有子视图并使其隐藏。
要使 scrollView 可滚动计算 contentSize 必须大于 scrollView 大小。