UIWebView прогресс загрузки и настроить веб-страницу, чтобы соответствовать странице просмотра? - PullRequest
9 голосов
/ 01 апреля 2010

Я использую UIWebView для загрузки веб-страницы.

Есть 3 вопроса:

1. Можно ли отслеживать процентное продвижение, когда UIWebView загружает страницу?

2. Я заметил, что когда Safari загружает веб-страницу, в текстовом поле URL отображается синий фоновый индикатор выполнения, который сообщает пользователю процент загрузки веб-страницы. Какая технология для этого?

3. Я знаю, что есть свойство scalePageToFit

scalesPageToFit Логическое значение, определяющее, масштабируется ли веб-страница, чтобы соответствовать размеру представления, и пользователь может изменить масштаб.

Я пытаюсь установить для него значение ДА, но похоже, что его нет в публичном API, и мое приложение остановлено с черным экраном, я не уверен, что не так?

Ответы [ 5 ]

21 голосов
/ 01 апреля 2010

Ответить # 1)

Вместо использования UIWebView вы можете перетащить веб-страницу как объект NSData, используя NSURLConnection. Когда вы получите первоначальный ответ на ваш запрос от

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

веб-сервер должен возвращать значение «ожидаемого размера контента» (которое должно быть включено в ответ). Тогда вы будете продолжать вызывать следующий метод каждый раз, когда получаете данные:

 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

Продолжайте добавлять данные в существующий объект NSMutableData. Затем вы можете сравнить размер текущего объекта данных (NSMutableData.length) с ожидаемым размером ответа.

percentage = (myData.length*100)/theResponse.expectedContentSize;

Тогда вы можете обновить индикатор выполнения с этим процентом! Когда

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

работает, используйте ваши данные для вызова

[myWebView loadData:myData MIMEType:myMimeType textEncodingName:myEncoding baseURL:baseURL];

и он загрузит все, что вы перетащили в ваш веб-вид.

4 голосов
/ 08 июля 2010

Re # 3:

Вы можете попробовать указать scalePagesToFit в качестве YES в событии viewDidLoad UIView, которое содержит ваш веб-просмотр, например:

- (void)viewDidLoad {
    self.webView.scalesPageToFit = YES;
    //other code here...
}

Для случаев, когда это не работает, обратитесь к следующему вопросу StackOverflow: UIWebView не масштабирует содержимое, чтобы соответствовать , когда запрашивающий (и впоследствии ответчик) дал это решение.

Очевидно, вы можете использовать javascript, чтобы изменить размер страницы, чтобы она соответствовала браузеру:

NSString *jsCommand = [NSString stringWithFormat:@"document.body.style.zoom = 1.5;"];
[webLookupView stringByEvaluatingJavaScriptFromString:jsCommand];
0 голосов
/ 20 июня 2014

Чтобы ответить на вопрос № 1, существует решение, которое безопасно в App Store и использует аналогичный метод, что и Webkit, для отслеживания прогресса.

https://github.com/otium/OTMWebView

0 голосов
/ 11 марта 2012

Re # 2: Я считаю, что Safari использует приватный вызов API для UITextField (поэтому вы не можете сделать это, если хотите отправить в магазин приложений), но вы должны быть в состоянии реализовать это самостоятельно, поместив текстовое поле с нет границы над индикатором выполнения.

0 голосов
/ 24 ноября 2011

Вы можете попытаться использовать этот подкласс UIWebView, который использует частные методы UIWebView - поэтому это решение не на 100% безопасно AppStore (хотя некоторые приложения используют его почти на 100%: Facebook, Google app, ...).

https://github.com/petr-inmite/imtwebview

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...