Как правильно изменить размер 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 теперь покажет все элементы, но это не так.
РЕДАКТИРОВАТЬ: демонстрационную программу можно найти по адресу 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}
Я не понимаю, почему не сохраняется смена кадра, что меняет.
В какой-то момент я заменю жестко запрограммированные значения значениями, полученными из схемы потока, но я хотел исключить это и сохранить свой пример как можно более простым.
Контекст. В конечном итоге я хочу сделать следующее: у меня есть прокручиваемое представление с различными элементами управления, такими как метки и изображения, и представление коллекции с динамическим содержимым. Я хочу прокрутить все это, а не только представление коллекции, поэтому я не использую собственные средства прокрутки представления коллекции, которые работают нормально.
contentSize
- это правильный способ установить прокручиваемую область. Если вы не можете прокручивать, значит, вы не можете установитьcontentSize
. Вы уверены, чтоself.collectionView
неnil
во время звонка? Может ты случайно позвонил доviewDidLoad
? - person Tommy   schedule 27.12.2013contentSize
илиframe
представления коллекции. Обратите внимание, что я отключил прокрутку самого представления коллекции, потому что я хочу, чтобы само представление коллекции было показано полностью, которое затем должно быть заключено в представление прокрутки позже, когда это сработает. - person Martijn de Milliano   schedule 28.12.2013