UICollectionView с проблемами размера UIWebView

Мне нужно реализовать UICollectionView . Ячейки, которые я использую, имеют UIWebViews внутри них. Основная проблема заключается в том, что я хочу, чтобы размер ячеек был адаптирован к фактическому содержимому внутри webView.

Я использовал следующие два метода:

 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { CollectionViewCellDefault *cell = (CollectionViewCellDefault *)[collectionView cellForItemAtIndexPath:indexPath]; NSLog(@"rect %@", NSStringFromCGRect(cell.wvDisplayValue.frame)); CGSize retval = cell.wvDisplayValue.frame.size; retval.height += 135; retval.width += 135; return retval; } - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ CollectionViewCellDefault *cell = [collectionView dequeueReusableCellWithReuseIdentifier:detailColumnsCell forIndexPath:indexPath]; NSURL *indexFileURL = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"]; [cell.wvDisplayValue loadRequest:[NSURLRequest requestWithURL:indexFileURL]]; cell.lblTitle.text = @"Description: "; cell.frame = cell.wvDisplayValue.frame; return cell; } 

Проблема, конечно же, в том, что webView знает свой размер только после его загрузки:

 - (void)webViewDidFinishLoad:(UIWebView *)webView 

Как-то можно настроить размер UICollectionViewLayout для конкретной ячейки только после того, как веб-просмотр загрузил ее содержимое?

Каждый пример, который я нашел, имел либо фиксированные размеры, либо не использовал веб-виды, которым нужно время, пока они не рассчитали свой размер, чтобы соответствовать их контенту.

Есть ли способ сделать это?

2 Solutions collect form web for “UICollectionView с проблемами размера UIWebView”

Вы можете попробовать это для соответствующего webView в webViewDidFinishLoad:

 CGRect frame = webView.frame; CGSize fittingSize = [webView sizeThatFits:CGSizeZero]; frame.size = fittingSize; webView.frame = frame; 

Это изменит размер webView, чтобы он соответствовал его содержимому. Затем вычислите новый макет и вызовите invalidateLayout, чтобы использовать новый макет.

Я был застрял в комбинации WebView и CollectionView, и вы правы, с одной стороны, в коллекции необходимо определить размер ячейки сначала, т. Е. Перед отображением самого коллекцииView, т.е.

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

где, с другой стороны, WebView может определить фактический размер, который требуется только для webViewDidFinishLoad:

КАК РЕШАТЬ ТАКИЕ ПРОБЛЕМЫ?

В моем случае у меня была только одна секция, в которой был webView, поэтому я сделал, что я вычислил размер в webViewDidFinishLoad: а затем перезагрузил этот конкретный раздел после него

 - (void)webViewDidFinishLoad:(UIWebView *)aWebView { if (!_isArticleLoaded) { CGRect frame = aWebView.frame; frame.size.height = 1; aWebView.frame = frame; CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero]; frame.size = fittingSize; aWebView.frame = frame; NSMutableIndexSet *mutableIndexSet = [[NSMutableIndexSet alloc] init]; [mutableIndexSet addIndex:2]; NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height); _height = [NSNumber numberWithFloat:fittingSize.height]; _isArticleLoaded = YES; [_collectionView reloadSections:mutableIndexSet]; } } 

Поэтому изначально в viewdidload: localVariables назначаются текущие значения:

 _isArticleLoaded = NO; _height = [NSNumber numberWithFloat:200.0]; 

и для UICollectionView у меня было следующее:

 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section == 2) { return CGSizeMake(self.collectionView.frame.size.width,[_height floatValue]+35); } } 

Это в значительной степени решило мою проблему, когда я имел дело с одним разделом.

В вашем случае мой друг, вы не должны использовать WebView для каждой ячейки, это окажется дорогостоящим

  • Как я могу динамически изменять размер заголовка в UICollectionView?
  • CollectionView дразнит предыдущий и следующий
  • UICollectionView с UICollectionFlowLayout, не отображающим ячейки в нужном месте
  • CSStickyHeaderFlowLayout Header Frame
  • UICollectionView Просмотр заголовка и нижнего колонтитула
  • Как установить размер UICollectionViewCell в зависимости от динамического размера UIlabel в нем с помощью SWIFT программно?
  • UICollectionView с анимацией подпрыгивания
  • Ячейки UICollectionView исчезают
  • Дизайн для аннотирования элементов UICollectionView с дополнительными элементами управления
  • Уменьшить пробел между UICollectionViewCells
  • Проблема с размещением ячеек в пользовательской компоновке потока UICollectionViews
  • Interesting Posts

    Делегат NSURLSession и завершениеHandler

    iOS: автоматическое восстановление соединения Bluetooth BLE в диапазоне

    Включен ли аргумент приложения Apple Smart Banner в приложение при установке?

    отредактировать исходный проект ios appdelegate.m до appdelegate.swift

    Xcode для отображения ошибки на текущей строке

    Универсальная инфраструктура iOS с архитектурой iphoneos и iphonesimulator

    Инициализированная глобальная переменная изменяется на «nil» в Swift UIView XIB?

    Как сохранить соединение XMPP в приложении IOS, когда приложение находится в фоновом режиме?

    Установить градиент за UITableView

    Как преобразовать NSDictionary в пользовательский объект

    Что означает «Аноним VM» в средствах распределения?

    Единый экземпляр AdMod во всех ViewControllers

    TabBarController с SWRevealViewController

    Приложение отслеживания местоположений приостанавливается в фоновом режиме через несколько минут

    Interface Builder (XIB) или Code при слиянии в командной среде?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.