UICollectionView автоматически изменяет высоту

Как правильно изменить размер UICollectionView, чтобы он полностью отображал его содержимое? Я перепробовал много вещей, включая настройку его кадра, вызовreloadData и аннулирование макета:

self.collectionView.contentSize = CGSizeMake(300, 2000);
self.collectionView.frame = CGRectMake(0, 0, 300, 2000);
[self.collectionView reloadData];
[self.collectionView.collectionViewLayout invalidateLayout];

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

У меня есть небольшая демонстрационная программа, в которой у меня есть источник данных, производящий 100 элементов. В Интерфейсном Разработчике я первоначально установил размер UICollectionView на небольшое значение, чтобы не все элементы помещались, после этого я нажимаю кнопку, после которой выполняется приведенный выше код. Я ожидаю, что UICollectionView теперь покажет все элементы, но это нет.

РЕДАКТИРОВАТЬ: Демо-программу можно найти по адресуhttps://github.com/mjdemilliano/TestUICollectionView.

EDIT2: Я заметил, что обновление кадра в какой-то момент потеряно, потому что если я снова нажму кнопку, текущий кадр вернется к старому значению. После добавления некоторых операторов журнала в обработчик событий кнопки вывод журнала будет следующим:

before: frame = {{0, 58}, {320, 331}}, contentSize = {320, 1190}
update button pressed
after: frame = {{0, 0}, {300, 2000}}, contentSize = {300, 2000}
before: frame = {{0, 58}, {320, 331}}, contentSize = {320, 1190}
update button pressed
after: frame = {{0, 0}, {300, 2000}}, contentSize = {300, 2000}

Я неНе понятно, почему смена кадра не сохраняется, что ее меняет.

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

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

Ответы на вопрос(8)

Ваш ответ на вопрос