UIWebView webViewDidFinishLoad не возвращает правильный размер содержимого встроенного scrollView

Я загружаю mathml-контент в UIWebView, и иногда математические выражения могут пересекать мой webview фрейм, и пользователю приходится прокручивать, чтобы просмотреть этот контент, который выходит за границы. Чтобы справиться с такими ситуациями, я показываю визуальный индикатор стрелки для пользователя всякий раз, когда его содержимое прокручивается. Моя проблема в том, что в моем webViewDidFinishLoad, если я пытаюсь получить доступ к webview, scrollView.contentSize, он не возвращает мне точный размер содержимого, но если я проверю это каким-либо другим методом после некоторой задержки, он получит правильный размер содержимого. Но проверка с помощью таймера я не думаю, что это эффективный способ сделать это. Ниже мой фрагмент кода,

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSLog(@"contentSize %@",NSStringFromCGSize(webView.scrollView.contentSize));// returning worng values, even if content size is more this is returning default frame values of webview
    [self performSelector:@selector(checkContentSize) withObject:self afterDelay:1.5];//working properly after delay
}

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

Я даже пробовал это сообщение и пытался захватить это событие как в shouldStartLoadWithRequest, так и в webViewDidFinishLoad, но даже это бесполезно.


person Smith    schedule 28.02.2014    source источник


Ответы (2)


Попробуй это

 float height = [[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight;"] floatValue];
person Sunny Shah    schedule 28.02.2014

Проблема в том, что когда вызывается webViewDidFinishLoad, это означает, что UIWebView загрузил содержимое HTML. Но он все еще должен отображать HTML, чтобы определить фактическую высоту HTML. Вот почему вы получаете правильный размер после небольшой задержки.

Лучший способ получить правильную высоту содержимого — добавить к содержимому некоторый код Javascript, который отправляет размер содержимого в UIWebView после полной визуализации HTML.

Вы найдете краткое руководство о том, как это сделать, в этом запись блога.

person joern    schedule 28.02.2014
comment
@joem На самом деле свойство scalesPageToFit было включено в моем веб-просмотре, и фактический контент, который я получаю, слишком велик. ScalesPageToFit изменяет его размер и настраивает контент в соответствии с границами окна iPhone, если я получаю доступ, как вы сказали в своем post я получаю фактическую ширину и высоту содержимого документа, что слишком больше, чем то, что в настоящее время отображается в веб-просмотре после scalesPageToFit. - person Smith; 28.02.2014