В статье описано основные моменты при работы с элементом управления UIWebView, а также некоторые tips, с которыми пришлось столкнуться в процессе работы.
позволяет добавить веб-браузер в свое приложение. По своей сути это будет Safari (правда немного модифицированный в учетом специфики iPhone).
Делегат
Если вы используете UIWEbView и хотите влиять на процес загрузки, отображения информации, то вам необходимо реализовать протокол UIWebViewDelegate.
При повороте появилась одна проблема, для решения которой пришлось потратить много времени, а именно установленный шрифт при повороте увеличивался. Эта проблема обсуждается , и как ни странно, но первых два ответа не помогли.
Решение следующее — необходимо сделать reload и заново установить желаемый размер шрифта:
Это создает некоторое «дергание», но решает проблему. Если же самовольное изменение размера шрифта для вас является не критичным, то reload можно не делать.
Если у вас есть другие решения, можете поделиться.
Как узнать высоту UIWebView включая область скроллинга?
Для этого необходимо выполнить код:
int position = [[webView stringByEvaluatingJavaScriptFromString:@«window.pageYOffset»] intValue]
Как узнать высоту проскроленной области?
Для этого необходимо выполнить код:
int position = [[webView stringByEvaluatingJavaScriptFromString:@«scrollY»] intValue]
Использование Viewport
Viewport позволяет управлять масштабированием вашего веб-контента, задавать видимые области и т.д. Более детально с примерами читаем .
Скроллинг к указанной позиции
Необходимо использовать JavaScript функцию scrollTo:
Главная задача — сохранить последнюю позицию (scrollY) и при окончании загрузки выполнить scrollTo. Все отлично работает до того момента, пока вы захотите, чтобы это работало при поворотах.
Пересчет координаты типа currentPosition * 480 / 320 не поможет, так как при повороте размер занимаемой текстом области может меняться. Я получил оптимальный коэффициент при поворотах около 1.43.
Пересчет координат необходимо делать до того, как произойдет поворот, лучше всего в функции willRotateToInterfaceOrientation:
Это поможет вам избежать ошибки пересчета в некоторых случаях.
Эти советы действительны при
[webView setScalesPageToFit:NO];
В противном случае ваш UIWebView будет пытаться втиснуть весь контент в отведенную для него область. Досконально разобраться в логике масштабирования и вписывания пока не удалось.
Комментарии (0)
RSS свернуть / развернутьТолько зарегистрированные и авторизованные пользователи могут оставлять комментарии.