Я уже некоторое время борюсь с этим, и все, что я пробовал, потерпело неудачу.
В частности, я пытаюсь создать модальный диалог произвольной формы с прокручиваемым представлением, содержащим контейнер для другого представления. У меня было много разных результатов, в том числе иногда с правильной работой. Чаще всего это выглядит так, как надо, но без прокрутки.
В конце концов скачал код Дики Сингха, который отлично работал, но не имел ничего особенного. (Отличное чистое решение, кстати). Итак, я добавил контейнер, точно такой же, как в моем коде, и он сломался!
После некоторых экспериментов я выяснил, что происходит. Просто потерпи меня.
1) При использовании Auto Layout размер вида прокрутки, по-видимому, определяет границы прокрутки. Установка «contentSize» в «Определенные пользователем атрибуты времени выполнения», по-видимому, не влияет на это, равно как и установка «contentSize» или «bounds» в «viewWillDisplay» или «viewDidLoad». Таким образом, если начальный размер представления прокрутки составляет 800x800, это будет все пространство, которое может быть отображено. По этой причине, когда мне нужна прокручиваемая область, я создаю контейнерное представление, а затем помещаю прокручиваемое представление в содержимое.
2) Без автоматической компоновки работает настройка «contentSize» в «Определенных пользователем атрибутах времени выполнения», как и при программной установке в «viewDidLoad». Я предпочитаю использовать «Определенные пользователем атрибуты времени выполнения», потому что он соответствует размеру макета. Это решение позволяет вам использовать вид прокрутки с большей гибкостью, так как он может быть любого размера во время разработки.
3) Независимо от автоматической компоновки, если какой-либо вид в пределах области прокрутки точно совпадает с ЛИБО горизонтальными или вертикальными границами рамки, то вид с прокруткой перестает функционировать как вид с прокруткой. Это относится к моему собственному коду и к коду Дики Сингха во всех возможных конфигурациях, которые я пробовал.
Понятия не имею, что является причиной (3), но это явно ошибка.
Надеюсь, это поможет всем, кто пытается использовать прокрутку. Я полагаю, что некоторые люди используют их без каких-либо проблем, а некоторые (как я) заметили, но проблемы с ними.