UICollectionView всегда автоматически изменяет размер ячеек. Не используются размеры, возвращенные делегатом - PullRequest
5 голосов
/ 07 октября 2019

Недавно обновлен до Xcode 11 / iOS13. Работа над новым контроллером представления. UICollectionView вызывает мой метод делегата sizeForItemAtPath, но кажется, что представление коллекции всегда выбирает размер самостоятельно, основываясь на ограничениях. Но я не хочу этого!

Я попытался установить приблизительный размер 1x1, чтобы попытаться обойти это. Не сработалоЯ остановился на всех методах делегата / источника данных и не вижу ничего необычного.

Я тоже сталкивался с этим ( `systemLayoutSizeFittingSize` не вызывается на iOS 13 ), может быть, моя проблема связана? Я могу решить эту проблему, переопределив метод systemFittingSize в этой ссылке - , но мне действительно не нужно это делать.

Странная вещь, которую я нахожу, состоит в том, что любые существующие xibs с представлениями коллекцииработают должным образом - похоже, единственное отличие состоит в том, что я создаю представление ячейки / коллекции с помощью Xcode 11 VS Xcode 10.

Я также заметил, что элементы UICollectionViewCell в Xcode11 содержат «представление содержимого» - но Xcode 10 xibsнет просмотра содержимого

Кто-нибудь еще испытал это?

Ответы [ 2 ]

5 голосов
/ 07 октября 2019

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

enter image description here

Измените значение на Нет:

enter image description here

0 голосов
/ 08 октября 2019

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

Представление коллекции само по себе или его делегат не имеют методов, которые запрашивают ячейки для их предпочтительных размеров. С другой стороны, макет потока делает. Известно , что макет потока внутренне проверяет, использует ли ячейка автоматическое макетирование, и, если она используется, игнорирует информацию, предоставленную делегатом.

Можно отказаться от такого поведенияпутем подкласса макета и возврата false в shouldInvalidateLayout(forPreferredLayoutAttributes:, withOriginalAttributes:).

...