Кто-нибудь знает, почему contentSize не обновляется сразу после перезагрузкиДата вызывается в UICollectionView?contentSize не обновляется после reloadData вызывается в UICollectionView
Если вам нужно знать, contentSize лучшие работы вокруг я нашел следующее:
[_collectionView reloadData];
double delayInSeconds = 0.0001;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(DISPATCH_TIME_NOW, dispatch_get_main_queue(), ^(void)
{
// TODO: Whatever it is you want to do now that you know the contentSize.
});
Очевидно, что это является довольно хрупким Хак, который делает предположения о реализации Apple, но до сих пор она доказала работают довольно надежно.
Есть ли у кого-нибудь другие обходные пути или знания о том, почему это происходит? Я обсуждаю отправку радара, потому что я не могу понять, почему они не могут вычислить contentSize в том же цикле запуска. Вот как UITableView работал для всей своей реализации.
EDIT: этот вопрос используется для ссылки на метод setContentOffset внутри блока, потому что я хочу прокрутить представление коллекции в моем приложении. Я удалил вызов метода, потому что ответы людей были сосредоточены на том, почему я не использовал scrollToItemAtIndexPath внутри того, почему contentSize не обновляется.
Я думаю, что более подходящим способом было бы использовать scrollToItemAtIndexPath: atScrollPosition: анимированные: , Что касается того, почему размер содержимого не обновляется, я могу только предположить его оптимизацию, чтобы предотвратить либо вызов потенциально многочисленных и дорогостоящих динамических вычислений размера, либо возврат неточной информации, а расширение, выполняющее ненужную обработку и работу. – Matt
В этом приложении я действительно использую это. Для простоты я решил упомянуть setContentOffset. Это хороший момент, когда reloadData, вызываемый несколько раз, может вызвать дорогостоящие вычисления. Слишком плохо, нет метода reloadData с обработчиком завершения. –