@DjPROgramiST

UICollectionView with custom UICollectionViewCell?

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
AnnouncementCollectionViewCell *cell = (AnnouncementCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:kCollectionViewCellIdentifier forIndexPath:indexPath];

NSURL *url = [NSURL fileURLWithPath: fileName isDirectory: NO];
[cell.announcement setDelegate:self];

[cell.announcement loadRequest:[NSURLRequest requestWithURL:url]];

int contentHeight = [[cell.announcement stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] integerValue];

NSLog(@"Content Height %d", contentHeight);

CGRect rect = cell.announcement.frame;
rect.size.height = contentHeight;
cell.announcement.frame = rect;

cell.autoresizesSubviews = YES;
cell.frame = rect;


return cell;
}

При наполнении коллекции данными
webView еще не успевает загрузить контент как начинает высчитыватся высота элемента
Как сделать чтобы вначале загружался контент а затем высчитывался высота элемента.
Если использовать dispatch_sync приложение падает при загрузке коллекции
  • Вопрос задан
  • 2641 просмотр
Пригласить эксперта
Ответы на вопрос 1
@agee
Не трогайте высоту в cellForItemAtIndexPath вообще. Только после загрузки данных в UIWebView меняйте высоту этого webView. Когда это произойдет, просто вызовите - (void)reloadItemsAtIndexPaths:(NSArray *)indexPaths для того indexPath, которому соответствует этот webView. Это обновит содержимое нужной ячейки и запросит ее размеры у делегата.

Если используете UICollectionViewDelegateFlowLayout нужнуые размеры передайте в - (CGSize)collectionView:(UICollectionView *)aCollectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath. Этот метод вызовется сам после вызова reloadItemsAtIndexPaths
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы