Подтвердить что ты не робот

Как я могу использовать Autolayout для установки ограничений в моем UIScrollview?

Я потратил два дня на тестирование различных решений для Подходит для смешанных и чистых Autolayout, чтобы достичь того, что было тривиальной настройкой прокрутки до автовыключения, и теперь он официально - я должен быть слишком глуп. Я настраиваю это в основном на Storyboard (ну, это так, как есть).

Итак, вот моя просьба о помощи.

Viewtree:

UIView
-UIView
-UIView
..-UIScrollview
...-UIButton
...-UIButton
...-UIButton

Кнопки должны прокручиваться по горизонтали (слева направо и наоборот). Может кто-нибудь, пожалуйста, дайте мне знать, как установить ограничения для достижения этого, используя чистый Autolayout???

-

Я пробовал смешанный подход, например:

UIView
- UIView
- UIView
..-UIScrollview
...-UIView (contentview)
....-UIButton
....-UIButton
....-UIButton

... и установить фиксированные ограничения ширины и высоты для параметров contentview и translatesAutoresizingMaskIntoConstraints в соответствии с технологией Apple TechNote. Кнопки и scrollview настроены с использованием ограничений. Это получает прокрутку scrollview (yay), но, увы, она прокручивается слишком далеко! Насколько я могу судить, ширина прокрутки как-то удвоена от того, что я установил в contentview на???!!!

Я также попробовал использовать метод чистого автозапуска, как с contentview, так и без него. Все представления translatesAutoresizingMaskIntoConstraints=NO, за исключением self.view. Кнопки имеют фиксированные ограничения ширины/высоты и прикреплены ко всем четырем краям прокрутки. Ничего не прокручивается.

Итак, я полностью озадачен, почему я не могу заставить его работать правильно. Любая помощь очень ценится, и если вам нужна какая-либо другая информация, пожалуйста, спросите!

ОБНОВЛЕНО Скриншот с решением - buttonZ:

enter image description here

РЕДАКТИРОВАТЬ @Джейми Форрест Таким образом, решение оказывается неправильным трейлинг-ограничением на последней кнопке. Вместо 6441 значение, которое я установил, было отрицательным, -6441. Трудность в том, что при настройке значения в раскадровке на панели инструментов Pin есть два варианта:

enter image description here

Текущее значение холста отрицательное (что приводит к отсутствию прокрутки), а параметр ниже положителен (активирует прокрутку). Это означает, что я не глуп, но, по крайней мере, полуслепую. Хотя, на мой взгляд, разве это не мешает, что XCode не показывает ошибку для "неправильной" настройки?

СОГЛАСНО СНОВА Теперь это смешно... изменение конечного значения с -6441 (без прокрутки) до 6441 с возможностью прокрутки. Но мой старый друг "слишком много содержимого" вернулся, что привело к тому, что размер контента вдвое больше, чем он должен быть! Решение получить правильный свиток содержимого состояло в том, чтобы установить ограничение на конец в ZERO! Это не очевидно при работе в Storyboard, но, глядя на код @Infinity James, это то, что должно быть.

4b9b3361

Ответ 1

Трудно видеть точные значения и настройки ваших ограничений, поскольку вы вставляли их здесь, поэтому я не уверен, глядя на ваши скриншоты, где вы поступили не так.

Вместо объяснения того, что неправильно в вашей настройке, я создал базовый образец проекта с очень похожей иерархией и ограничением вида настроить на тот, который вы описываете. Горизонтальная прокрутка работает так, как ожидалось, в примере проекта, в котором используется подход "Чистый автозапуск", который Apple описывает в Техническая заметка.

У меня также возникло много проблем, из-за чего автоматическая компоновка работала с UIScrollView. Ключ к тому, чтобы заставить его работать, - убедиться, что все элементы в представлении прокрутки, взятые вместе, имеют ограничения, которые в конечном итоге свяжутся со всеми сторонами представления прокрутки и которые способствуют тому, что система AutoLayout может определять contentSize для который будет больше, чем его кадр. Похоже, вы пытались сделать это в своем коде, но, возможно, у вас были некоторые избыточные ограничения, которые делали contentSize слишком маленьким.

Также следует отметить, что, как упоминалось выше, с AutoLayout и UIScrollview, вы больше не устанавливаете contentSize явно. Система AutoLayout вычисляет contentSize на основе ваших ограничений.

Я также нашел эту главу ebook, чтобы помочь мне понять, как все это работает. Надеюсь, все это поможет.

Ответ 2

LOL добро пожаловать в клуб глупости. Я один из основателей.: D

Для прокрутки VERTICAL: единственный способ заставить его работать (iOS 8, Xcode 6 и чистая автоотключение) добавлял следующие ограничения в мой вид прокрутки (все связанные с супервидом):

  • Равные ширины
  • Равные высоты
  • Выравнивание центра Y
  • Выравнивание центра X

Моя структура:

  UIView
   - ScrollView
    - Subview
    - Subview
    - Subview
    - Subview
    - ...

Это конечный результат:

Demo

Это настройка:

SetupПолный экран

И вот проект.

Надеюсь, это спасло бы кого-то от ПРОШЛОГО СЛЕДА В 5 AM.: D

Ответ 3

Простой пример с самосохранением

Судя по большому числу голосов по этому вопросу и низкому числу голосов по ответам, люди не находят здесь понятного и быстрого решения. Позвольте мне попытаться добавить его. Этот проект является самодостаточным примером, полностью выполненным в Interface Builder. Вы должны иметь возможность работать через 10 минут или меньше. Затем вы можете применить концепции, которые вы изучили, к своему собственному проекту.

введите описание изображения здесь

Оригинальный вопрос задает про кнопки прокрутки. Здесь я просто использую UIView, но они могут представлять любой вид, который вам нравится. Я также выбрал горизонтальную прокрутку, потому что скриншоты раскадровки более компактны для этого формата. Однако принципы одинаковы для вертикальной прокрутки.

Ключевые понятия

  • UIScrollView должен использовать только одно подвью. Это "UIView", который служит для просмотра содержимого, чтобы содержать все, что вы хотите прокрутить.
  • Сделать представление содержимого и родительский элемент прокрутки иметь равные высоты для горизонтальной прокрутки. (Равная ширина для вертикальной прокрутки)
  • Убедитесь, что все прокручиваемое содержимое имеет заданную ширину и закреплено со всех сторон.

Запустить новый проект

Это может быть только одно приложение просмотра.

Раскадровка

В этом примере мы создадим горизонтальное представление прокрутки. Выберите контроллер просмотра, а затем выберите Freeform в инспекторе размеров. Сделайте ширину 1,000 и высоту 300. Это просто дает нам место на раскадровке, чтобы добавить контент, который будет прокручиваться.

введите описание изображения здесь

Добавить прокрутку

Добавьте UIScrollView и соедините все четыре стороны с корневым представлением контроллера вида.

введите описание изображения здесь

Добавить представление содержимого

Добавьте UIView в качестве подсмотра в прокрутку. Это ключ. Не пытайтесь добавить много просмотров в прокрутку. Просто добавьте один UIView. Это будет просмотр вашего контента для других просмотров, которые вы хотите прокрутить. Подключите представление содержимого к просмотру прокрутки на всех четырех сторонах.

введите описание изображения здесь

Равные высоты

Теперь в структуре документа Command выберите оба представления содержимого и представление родительского представления прокрутки, чтобы выбрать их оба. Затем установите высоту равным (Control перетащите из представления содержимого в вид прокрутки). Это также ключ. Поскольку мы прокручиваем по горизонтали, просмотр содержимого прокрутки не будет знать, насколько он высок, если мы не установим его таким образом.

введите описание изображения здесь

Примечание:

  • Если бы мы прокручивали содержимое по вертикали, мы бы установили ширину представления содержимого равным ширине родительского представления прокрутки.

Добавить контент

Добавьте три UIView и дайте им все ограничения. Я использовал 8 полей для всех.

введите описание изображения здесь

Ограничения:

  • Зеленый вид: нажмите верхний, левый и нижний края. Сделайте ширину 400.
  • Красный вид: нажмите верхний, левый и нижний края. Сделайте ширину 300.
  • Фиолетовый вид: прикрепите все четыре края ребер. Сделайте ширину любым оставшимся пространством (268 в этом случае).

Установка ограничений ширины также является ключевым, так что в представлении прокрутки будет известно, насколько широка будет его просмотр содержимого.

Пройденные

Это все. Теперь вы можете запустить свой проект. Он должен вести себя как прокручиваемое изображение в верхней части этого ответа.

Для вертикальной прокрутки просто поменяйте все направления ширины и высоты в этом примере (проверенные и работающие).

Дальнейшее исследование

Ответ 4

ContentSize неявно задается путем применения ограничений внутри UIScrollView.

Например, у вас есть UIScrollView внутри UIView, он будет выглядеть так (как я уверен, вы знаете):

    UIView *containerView               = [[UIView alloc] init];
    UIScrollView *scrollView            = [[UIScrollView alloc] init];
    [containerView addSubview:scrollView];
    containerView.translatesAutoresizingMaskIntoConstraints = NO;
    scrollView.translatesAutoresizingMaskIntoConstraints    = NO;
    NSDictionary *viewsDictionary       = NSDictionaryOfVariableBindings(containerView, scrollView);

    [containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|"
                                                                          options:kNilOptions
                                                                          metrics:nil
                                                                            views:viewsDictionary]];
    [containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|"
                                                                          options:kNilOptions
                                                                          metrics:nil

Это заставит scrollView заполнить размер containerView (так что containerView должен быть определенного размера).

Затем вы можете настроить contentSize для UIScrollView, неявно устанавливая его достаточно большим, чтобы удерживать кнопки следующим образом:

    UIButton *buttonA                   = [[UIButton alloc] init];
    UIButton *buttonB                   = [[UIButton alloc] init];
    UIButton *buttonC                   = [[UIButton alloc] init];
    [scrollView addSubview:buttonA];
    [scrollView addSubview:buttonB];
    [scrollView addSubview:buttonC];
    buttonA.translatesAutoresizingMaskIntoConstraints       = NO;
    buttonB.translatesAutoresizingMaskIntoConstraints       = NO;
    buttonC.translatesAutoresizingMaskIntoConstraints       = NO;

    viewsDictionary                     = NSDictionaryOfVariableBindings(scrollView, buttonA, buttonB, buttonC);

    [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[buttonA]-|"
                                                                       options:kNilOptions
                                                                       metrics:nil
                                                                         views:viewsDictionary]];
    [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[buttonA]-[buttonB]-[buttonC]-|"
                                                                       options:NSLayoutFormatAlignAllBaseline
                                                                       metrics:nil
                                                                         views:viewsDictionary]];

Ответ 5

Есть много вопросов об использовании AutoLayout с UIScrollView, ключевым моментом, который мы игнорируем, является то, что внутренние представления UIScrollView создают ограничения на Просмотр содержимого, но не сам UIScrollView. Обратитесь к Технической ноте TN2154, вы можете найти:

Класс UIScrollView прокручивает его содержимое, изменяя начало его границ. Чтобы сделать эту работу с помощью автоматического макета, верхний, левый, нижний и правый края в представлении прокрутки теперь означают края его содержимого.

На следующем рисунке будет показано: enter image description here

Вы можете найти, что конечное пространство составляет 500 точек, если ограничение связано с UIScrollView, представление будет пропущено и должно обновить его фрейм. Однако никаких предупреждений и ошибок нет. Потому что все ограничения противоречат представлению содержимого.

UIScrollView будет вычислять размер представления содержимого в соответствии с ограничениями внутренних представлений. (Например, размер содержимого: ширина = 100 (ведущее пространство) + 200 (ширина представления) + 500 (конечное пространство), высота = 131 (верхний интервал) + 200 (высота) + 269 (нижнее расстояние)

Как добавить ограничения для представлений в UIScrollView:

  • Отображение позиций просмотров в представлении содержимого.
  • Добавьте верхний, правый, нижний, левый промежутки к краям содержимого, а также ширину и высоту этих представлений.

И все это сделано.

Простым способом работы с AutoLayout с помощью scrollview является добавление в представление прокрутки представления контейнера, содержащего все подпункты.

Заключение: ключевым моментом для понимания AutoLayout с UIScrollView является внутреннее представление, создающее ограничения для представления содержимого, но не самого UIScrollView.

прилагается пример кода

Ответ 6

Следующее решение работало для меня для scrollView с автозапуском и без contentSize:

  • Перетащите n, перетащите scrollView в viewController и примените все ограничения, чтобы покрыть необходимое пространство.
  • Перетащите n UIView внутри scrollView и сделайте его покрывающим все пространство scrollView и примените ограничения , чтобы быть сверху, влево, вправо, в нижнем пространстве из scrollView.
  • Установите высота (и ширина, если требуется горизонтальная прокрутка) внутреннего вида в зависимости от необходимости прокрутки. Эта часть также может быть выполнена из кода, если требуется.
  • Critical. После того, как вы установите высоту в какое-то большое значение в точке (3), вернитесь к точке (2) и убедитесь, что установите верхние, левые, правые, нижние значения назад на ноль, поскольку Xcode может иметь изменили их для вас, когда вы изменили высоту в (3).

И все готово. Теперь вы можете добавить любое количество элементов управления в это представление и применить ограничения, имеющие отношение друг к другу (которые, похоже, не работают без этого представления). Если вы не хотите использовать это представление, вам придется применять ограничения для каждого элемента управления, относящиеся к scrollView (не связанные друг с другом).


Подавляющий совет..............

Critical. Скажем, для ясности UIScrollView имеет 1000 широкий и 100 высокий. (Фактически, эти значения были бы динамичными, конечно, в зависимости от ширины устройства и т.д. Но сейчас просто скажем 1000 широко и 100.) Скажем, вы делаете горизонтальный свиток. Поэтому поместите UIView внутри UIScrollView. (Это "представление контента".) Установите все четыре ограничения в верхнем, нижнем, верхнем и нижнем контурах содержимого в виде прокрутки. Сделайте их нулевыми, даже если это кажется неправильным. Установите высоту содержимого UIView на 100 и забудьте об этом. Теперь: вы хотите прокручивать по горизонтали, поэтому установите ширину представления содержимого, чтобы можно было сказать 1225.

Обратите внимание, что ширина представления содержимого теперь на 225 больше ширины родительского прокрутки. Это нормально: на самом деле, вы ДОЛЖНЫ это сделать. Обратите внимание, что

... вы не устанавливаете для задней ширины отрицательную величину 225...

вы думаете, что вам нужно "сопоставить" ширину , как обычно,. Но если вы это сделаете, он не будет работать вообще.

Вы должны установить передние и конечные числа в ZERO, никогда не отрицательные (даже если ширина больше)

Интересно, что вы действительно можете установить ведущие/завершающие числа в любое положительное значение (попробуйте сказать "50" ), и это дает вам вид отскока. (Это часто выглядит великолепно: попробуйте.) Любое отрицательное значение с обоих концов будет "тихо ломаться".

Обратите внимание, что, беспричинно, часто Xcode (по состоянию на 7.3.1 в любом случае),

будет "полезно" устанавливать эти значения для отрицательных чисел!

потому что он пытается автоматически подсчитать их для вас. Если так, то он будет бесшумно ломаться. В первом случае установите все четыре значения в ноль. И установите ширину представления содержимого намного шире, чем "1000" в примере.


Отредактировано: В большинстве случаев я использовал UITableView вместо UIScrollView. Поскольку tableView мне кажется гораздо более гибким и динамичным.

Ответ 7

Я предполагаю, что у вас проблемы с contentSize. Отметьте это сообщение в блоге о том, как обращаться с contentSize при использовании "чистого" подхода AutoLayout. Суть его в том, что ваши ограничения неявно определяют размер содержимого. Вы никогда не устанавливаете его явно при использовании AutoLayout. Я добавил пример проекта в конце сообщения в блоге, чтобы продемонстрировать, как он работает.

Ответ 8

В технических заметках есть фрагмент, который вы, возможно, просмотрели. Вы можете неявно установить размер содержимого прокрутки, используя ограничения, закрепленные на краях прокрутки.

Вот простой пример. Создайте раскадровку с одним видом, имеющим один вид прокрутки. Задайте эти ограничения прокрутки, чтобы они соответствовали размеру представления, в которое вы его ввели.

Внутри этого прокрутки добавьте один вид. Явно задайте размер этого представления с помощью ограничений (и убедитесь, что размер больше, чем вид прокрутки).

Теперь добавьте еще четыре ограничения на этот внутренний вид, блокирующий четыре ребра внутреннего вида в своем родительском прокрутке. Эти четыре ограничения приведут к тому, что размер контента будет расширяться для размещения внутреннего вида.

Если у вас есть несколько видов, которые вы хотите добавить в прокрутку, например, выложенные горизонтально, вы заблокируете левую часть первого подсмотра слева от вида прокрутки, заблокируете подзоны друг к другу по горизонтали, и правую часть последнего подвидного вида в правой части прокрутки. Эти ограничения заставят размер содержимого представления прокрутки расширяться для размещения всех подзонов и их ограничений.

Ответ 9

Если у вас есть вопрос: "Как поместить кучу UITextFields в вертикальном прокрутке UIScrollView, чтобы они не касались клавиатуры, когда у них есть фокус", лучший ответ:

Не.

Вместо этого используйте UITableViewController со статическими ячейками.

Вы получаете бесплатное прокручивание прокрутки, и все вставки содержимого Just Work, если ваш контроллер просмотра отображается внутри UINavigationController.

Ответ 10

Вы должны организовать свой макет, как этот
ViewControllerView содержит ScrollView, ScrollView содержит ContainerView, ContainerView содержит 2 Labels
введите описание изображения здесь

Затем выполните 3 шага, чтобы ваш ScrollView мог прокручивать

  • Настройка ScrollView pin (верхний/правый/нижний/левый) на ViewControllerView
    • Настройка ContainerView pin (верхний/правый/нижний/левый) на ScrollView
    • Установить Horizontally in Container ( не установить Vertically in Container)
    • Label1 pin ( верхний/правый/левый) до ContainerView
    • Label1 pin (правый/левый/ снизу) до ContainerView и сверху до Label1

введите описание изображения здесь

ЗДЕСЬ демонстрационный проект

Надеемся на эту помощь

Ответ 11

Чистый подход к автоопределению работает красиво, но очень больно настраиваться, если вы переходите от неавтоматического отключения. Я сделал это несколько раз, и у меня есть несколько общих советов:

  • Начните с малого: даже если это означает воссоздание представлений раскадровки, начните с нескольких элементов и медленно создавайте свои представления, проверяя, что прокрутка работает после добавления нескольких элементов.
  • Отключить translatesAutoresizingMaskIntoConstraints на все: это всегда было причиной конфликтов ограничений для меня.
  • Правильно установите ограничения UIScrollView: убедитесь, что просмотр прокрутки со всех сторон подключен к родительскому виду, иначе он просто не будет расширяться вообще.

Ответ 12

После некоторого времени, связанного с этой проблемой, я наконец нашел решение. Я работаю с раскладниками универсального класса (600x600). Я создал UIView (contentView) размер scrollView и создал ограничения для Top, Bottom, Leading и Trailing для scrollView. Затем я обрезал размер вручную с contentView до 600x600. Раскадровка перестала пытаться изменить размер всего, и я мог работать, но вид выглядел ужасно на реальном устройстве или симуляторе. Я сделал 2 ограничительных выхода этих обрезанных размеров.

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *contentViewWidthConstraint; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *contentViewHeightConstraint;

Затем в viewDidLoad

CGSize viewSize = self.view.frame.size;
self.contentViewWidthConstraint.constant = viewSize.width;
self.contentViewHeightConstraint.constant = viewSize.height;

Отлично работает.

Ответ 13

Если вы, как я, вы просто используете статический контент без каких-либо указаний внутри subview, например, вы можете сделать это следующим образом:

override func viewDidLayoutSubviews() {
    scrollView.contentSize = CGSizeMake(320, 800)
}

Ответ 14

Я потратил несколько дней, пытаясь найти решение, как использовать AutoLayout для просмотра встроенного Scrollview, чтобы центрировать прокрутку в видимом экране, который работает во всех устройствах/размерах экрана, а также при вращении экрана.

Я потратил дни, пытаясь сделать это только с Autolayout, и приблизился, но никогда не был достаточно близко. Поэтому в итоге мне пришлось добавить 3 строки кода на экран, а в viewDidLoad.

См. решение ниже:

  • Создайте scrollview и заполните его любыми объектами, которые вы хотите.
  • Включить автомаркет
  • Затем центрируйте ScrollView по вертикали и по горизонтали Centre ScrollView
  • Выберите Вид, а затем "Добавить отсутствующие ограничения" - это значит, что это делает
  • В результате создается множество ограничений. Для представления создано 2 новых: "Horiz space scrollview to View" и "Vert Space scrollview для просмотра" или наоборот.
  • Удалите "Просмотр прокрутки пространства Horiz для View", так что теперь вы остаетесь с тремя ограничениями в представлении. 2 для ввода прокрутки в представлении и один для установки вертикального пространства между прокруткой и представлением
  • Теперь привяжите ограничение Vert к вашему коду щелчком и Ctrl, перетащив его в заголовочный файл и создав NSLayoutConstraint IBOutlet (я назвал my constraintVertVtoSV)
  • Теперь перейдите в файл .m и добавьте эти строки кода в viewDidLoad (играйте с суммой заполнения, чтобы получить правильное центрирование по вертикали)

    if (IPAD)
    

    {   self.constraintVertVtoSV.constant = 150.0; }

  • теперь он должен работать на всех устройствах и быть правильно центрирован и по-прежнему правильно прокручиваться.

Ответ 15

Аналогичная проблема, с которой я столкнулся сегодня с iOS 8.4, Xcode 6.4

Здесь есть представление, содержащее представление прокрутки, содержащее subviews contentView (UIView).

Во всем есть автоматическая компоновка. Края scrollview привязаны к родительским видам представлений с ограничениями. Края просмотра содержимого привязаны к краям вида прокрутки с ограничениями.

Первоначально представление содержимого отклоняло бы размер как полная ширина прокрутки. Мне пришлось добавить дополнительное ограничение для представления содержимого, чтобы его ширина соответствовала представлению родительской прокрутки. Или я могу установить ограничение contentView.centerX == scrollView.centerX. Либо один из них в дополнение к закреплению краев неожиданно сделал размер содержимого надлежащим образом.

// Either one of these additional constraints are required to get autolayout to correctly layout the contentView. Otherwise contentView size is its minimum required size
scrollView.addConstraint(NSLayoutConstraint(item: contentView, attribute: .CenterX, relatedBy: .Equal, toItem: scrollView, attribute: .CenterX, multiplier: 1.0, constant: 0))
scrollView.addConstraint(NSLayoutConstraint(item: contentView, attribute: NSLayoutAttribute.Width, relatedBy: .Equal, toItem: scrollView, attribute: .Width, multiplier: 1.0, constant: 0.0))

Привязка краев представления содержимого к просмотру прокрутки с использованием визуальных ограничений формы,

let cvConstraints = ["H:|[contentView]|", "V:|[contentView]|"]

Я использую процедуру для итерации по массиву и добавления их в scrollView.

Ответ 16

У меня возникла аналогичная проблема. Я задавал все ограничения и всегда задавался вопросом, почему он по-прежнему изменяет размеры некоторых подзонов. Моим решением было установить для clipToBounds значение YES.

Ответ 17

В быстро вы можете использовать это рабочее решение.

контрсилы

ScrollView: ведущий, трейлинг, верхний, нижний = надсмотр

ContentView: ведущий, трейлинг, верхний, нижний = прокрутка. Высота фиксированная/относительно содержимого.

Вы можете установить ограничение ширины (contentView) равным scrollviews superiew, но выберите remove remove во время сборки, потому что вы будете добавлять это ограничение программно. Это так, что IB не жалуется на предупреждения.

extension UIView {

    func setupContentViewForViewWithScroll(contentView vwContent : UIView) {
        //Set constraint for scrollview content
        let constraint = NSLayoutConstraint(item: vwContent, attribute: NSLayoutAttribute.Width, relatedBy: .Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: self.bounds.size.width)
        vwContent.addConstraint(constraint)
        self.layoutSubviews()
    }

}

И в контроллере просмотра viewDidLayoutSubviews я просто вызываю этот метод:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    self.view.setupContentViewForViewWithScroll(contentView: vwContent)
}

Ответ 18

Я знаю, что это непрофессиональное решение, а не то, что Apple предлагает в документе, но он работал у меня дважды, с разным контентом и может быть настроен очень быстро: В контроллере представления раскадровки вставьте UIView. В UIView вставьте элементы Table, Dynamic, 0 Prototype, Style Plain или Grouped. В Table View вставьте вид прокрутки, в списке прокрутки. То есть, никаких настроек в настраиваемом контроллере просмотра.