Да, st3fan верно, свойство contentSize UIScrollView должно быть установлено.
Но вы не должны отключать автопоставку для этой цели.
Вы можете легко настроить contentSize для UIScrollView с автоматической разметкой только в IB без кода.
Важно понимать, что при использовании autolayout contentSize UIScrollView не устанавливается напрямую, он рассчитывается на основе ограничений всех подпредставлений UIScrollView. И все, что вам нужно, это обеспечить надлежащие ограничения для подпредставлений в обоих направлениях.
например. если у вас есть только одно подпредставление, вы можете установить его высоту и пространство сверху и снизу для суперпредставления (т.е. в нашем случае scrollView) contentSize.height рассчитывается как сумма
Vertical Space (aSubview.top to Superview.top) + aSubview.height + Vertical Space (aSubview.top to Superview.top)
contentSize.width рассчитывается аналогично горизонтальным ограничениям.
Если для расчета contentSize слишком мало ограничений, то рядом с элементом View Controller Scene отображается небольшая красная кнопка, чтобы сообщить о неоднозначности макета.
Если существует много подпредставлений, то это может быть «цепочка» ограничений: сверху до верха подпредставления, высоты и промежутков между подпредставлениями и от нижнего подпредставления до низа, как в Danyal Aytekin answer.
Но на практике в большинстве случаев удобнее просто добавить пустое представление с требуемым размером и установить пробелы сверху, слева, снизу, справа от scrollView в 0.
Вы можете использовать это представление как «представление содержимого», т.е. поместить все остальные подпредставления в него или, если у вас уже есть много подпредставлений, и вы не хотите перемещать их и заново настраивать макет, вы можете добавить этот вспомогательный вид к существующим подпредставлениям и сделать его скрытым.
Чтобы сделать scrollView scrollable рассчитанным contentSize, он должен быть больше размера scrollView.