Как правильно изменить размер UICollectionView так, чтобы он полностью отображал его содержимое? Я пробовал много вещей, включая настройку его фрейма, вызов reloadData
и недействительность макета:
self.collectionView.contentSize = CGSizeMake(300, 2000);
self.collectionView.frame = CGRectMake(0, 0, 300, 2000);
[self.collectionView reloadData];
[self.collectionView.collectionViewLayout invalidateLayout];
но ничто из этого не имеет никакого эффекта. После нажатия кнопки я все еще вижу начальный вид, например:
У меня есть небольшая демонстрационная программа, где у меня есть источник данных, производящий 100 элементов. В Interface Builder я первоначально устанавливал размер UICollectionView на небольшое значение, чтобы не все элементы соответствовали, после чего я нажимаю кнопку, после которой выполняется код выше. Я ожидаю, что UICollectionView теперь покажет все элементы, но это не так.
EDIT: Демо-программу можно найти на 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}
Я не понимаю, почему изменение кадра не сохраняется, что его меняет.
В какой-то момент я заменю жестко заданные значения на значения, полученные из макета потока, но я хотел бы это исключить и сохранить мой пример как можно более простым.
Контекст: то, что я хочу сделать в конечном итоге, следующее: у меня есть прокручиваемое представление с различными элементами управления, такими как метки и образы, и представление коллекции с динамическим контентом. Я хочу прокрутить все это, а не только просмотр коллекции, поэтому я не использую собственные средства просмотра прокрутки, которые отлично работают.