Получение размера стилизованного содержимого UIWebView -Не совсем работает

Это кажется распространенной проблемой, но я не могу найти адекватного решения. Я пытаюсь изменить -размер группы UIWebView, чтобы они соответствовали их содержимому, но, похоже, это не работает должным образом. Лучшее решение, которое я нашел до сих пор, — это этот ответ , но в моем решении он работает лишь изредка. Идея состоит в том, чтобы изменить -размер UIWebView в методе делегата webViewDidFinishLoad:. Тем не менее, это все еще не имеет нужного размера. Если я запускаю обновление в неопределенное время послеwebViewDidFinishLoad:, содержимое получает правильный размер.

Ниже я опишу свою ситуацию и вставлю соответствующий источник на Gist .

Описание проблемы

У меня есть ситуация, когда я получаю данные из JSON API и отображаю данные в веб-просмотрах. API возвращает массив объектов, и каждый объект имеет поле «контент» с текстом в формате HTML -. Дизайнеры разработали структуру, которая включала в себя (в основном )скрытое представление, которое вы открываете, проводя пальцем вверх, которое содержит представление прокрутки всего контента, отформатированного особым образом.

Чтобы реализовать это, у меня есть три контроллера представления :: контроллер основного представления, контроллер вторичного представления, который вы открываете, проводя пальцем вверх по контроллеру основного представления, и контроллер третичного представления, который отображает один элемент содержимого в формате html -из результаты JSON API.
Контроллер вторичного представления содержит UIScrollView и массив контроллеров третичного представления. Каждый контроллер третичного представления содержит UIWebView для отображения содержимого в формате HTML -и метки для отображения других атрибутов объекта JSON.Поскольку третичные представления будут отображаться внутри UIScrollView во вторичном представлении, необходимо -изменить размер UIWebView третичных представлений, чтобы он соответствовал его содержимому, и отключить взаимодействие с пользователем, чтобы предотвратить сбивающую с толку прокрутку -представления -. ] в -прокрутите -просмотр сценария.

Процесс, чтобы все это заработало, выглядит следующим образом:

  1. Сначала на первичных контроллерах загрузите ViewDidLoad и отобразите вторичное представление. и индикатор активности, чтобы пользовательский интерфейс не зависал
  2. Затем загрузите данные из JSON API
  3. . Когда данные из API загружены (, уведомлены через делегата ), построить третичный просматривать контроллеры, устанавливать их атрибуты из загруженных данных и добавлять их во вторичные список контроллеров.
  4. Как только это будет завершено, вызовите метод настройки вторичного контроллера. Этот метод зацикливается через список третичных контроллеров и по очереди вызывает их методы настройки
  5. Метод настройки каждого третичного контроллера устанавливает текст для меток и устанавливает содержимое для UIWebView с использованием loadHTMLString:с предварительно определенным содержимым файла html -, с заменой содержимого объекта JSON.
  6. В методе делегата webViewDidFinishLoad:третичного контроллера, используя метод в этот ответ , re -размер веб-представления на основе размера содержимого.
  7. Re -измените размер представления третичного контроллера, чтобы оно соответствовало веб-представлению, и расположите все метки, которые перейти под веб-представление
  8. Затем третичный контроллер вызывает метод делегата, чтобы уведомить вторичный контроллер. что он закончил загрузку. Вторичный контроллер следит за тем, какие из его третичные контроллеры завершили загрузку.
  9. Когда все третичные контроллеры завершают загрузку, вторичный контроллер зацикливается. через свой список и добавляет третичные представления к своему содержимому UIScrollView, настраивая кадры и высота контента по ходу дела.

0
задан Community 23 May 2017 в 12:16
поделиться