Многие из приведенных выше ответов вводят в заблуждение или устарели. По состоянию на 2017 г. (возможно , гораздо раньше) интерфейс строитель делает поддержку scrollviews с содержанием автоматически размера. Хитрость в том, что XCode придает особое нестандартное значение ограничениям между просмотром прокрутки и содержимым внутри него. Эти «внутренние» ограничения не будут самом деле повлияют на размер содержимого, как вы могли бы ожидать.
Это означает, что вы можете, например, закрепить свой scrollview в нижней части основного представления с нулевым полем, а также закрепить содержимое вашего scrollview в нижней части scrollview с нулевым полем, но содержимое фактически не будет растягиваться при этом. Вместо этого контент получит свой размер, определяемый самостоятельно (подробнее см. Ниже), и это также будет размер прокручиваемой области в области просмотра.
Подумайте об этом так - существует асимметрия в ограничениях привязки к scrollview: ограничения от scrollview до «внешнего» (родительского) мира, как обычно, определяют размер и положение scrollview. Но ограничения «внутри» scrollview на самом деле устанавливают размер и положение прокручиваемой области scrollview, привязывая ее к содержимому.
Это совершенно неочевидно, потому что, когда вы перейдете к установке ограничений, XCode всегда предложит текущий интервал, и вам никогда не придет в голову намеренно изменить внутренние и внешние ограничения таким образом, чтобы это конфликтовало. Но вы можете, и они имеют значение, описанное выше: один контролирует макет прокрутки, а другой - размер прокручиваемой области содержимого.
Я наткнулся на это случайно, а затем, увидев, как это работает, привел меня к этой статье, которая полностью объясняет это и цитирует источник документации Apple для этого:
https://spin.atomicobject.com/2014/03/05/uiscrollview-autolayout-ios/
И последняя важная часть информации о самоопределяемом размере содержимого: вы можете почувствовать, что попали в ловушку-22, потому что вы обычно устанавливаете размер своего содержимого, например, по ширине родительского представления, но в этом случае родительский элемент - это scrollview и как описано выше - ограничение не повлияет на размер вашего контента. Ответ здесь состоит в том, чтобы помнить, что вы можете ограничить элементы элементами, не соседними напрямую в вашей иерархии представления: например, вы можете установить ширину вашего представления содержимого равной ширине основного представления вместо того, чтобы тщетно пытаться заставить прокрутку сделать это для тебя.