2015-12-11 4 views
7

У меня есть UIWebView, в котором содержимое масштабируется для соответствия. Затем веб-просмотр будет изменен в соответствии с содержанием (см. Ниже) и будет работать как ожидалось.UIWebView изменяет размер на loadRequest

В веб-обзоре также есть указатель жесты, прикрепленный для загрузки новых страниц - при выполнении loadRequest на webview на следующей странице появляется мгновенное мерцание назад к начальной ширине веб-представления. Я подтвердил, что кадр изменяется с использованием NSTimer и UILabel s для отображения ширины кадра.

Вот код для повторной калибровки:

string bookHeightS = bookWebview.EvaluateJavascript ("document.getElementsByTagName('body')[0].scrollHeight"); 
string bookWidthS = bookWebview.EvaluateJavascript ("document.getElementsByTagName('body')[0].offsetWidth"); 

nfloat bookHeight = 0; 
nfloat.TryParse (bookHeightS, out bookHeight); 

nfloat bookWidth = 0; 
nfloat.TryParse (bookWidthS, out bookWidth); 

nfloat scaling = bookWebview.Frame.Height/bookHeight; 

nfloat initialWidth = bookWebview.Frame.Width; 
nfloat newWidth = scaling * bookWidth; 

CGRect frame = new CGRect (bookWebview.Frame.Location, new CGSize (newWidth, bookWebview.Frame.Height)); 


if (frame.Width != bookWebview.Frame.Width) { 
    bookWebview.Frame = frame; 
} 

Этот код вызывается LoadFinished делегатом на WebView.

Я пробовал установить рамку прокруткиviewview webview и размер веб-представления ContentSize.

Что может вызвать это мерцание?

flickering webview

+0

человек, попробуйте проверить, много раз вызывается 'LoadFinished'. Подумайте, есть ли проблема. Кроме того, попробуйте другой html (например, веб-страницу Apple?). –

ответ

2

webViewDidFinishLoad делегат UIWebView будет вызываться несколько раз во время загрузки веб-страницы, и возможная причина щелчку это у вас есть различный размер для ваших веб-страниц, и вы пытаетесь, чтобы соответствовать их изменения Откадрируйте UIWebView к размер контента (в соответствии с вашим кодом), почему бы вам просто не зафиксировать фрейм UIWebView и не позволить вашей веб-странице соответствовать вашему UIWebView? с только «шириной: 100%» в css вашей веб-страницы!

+0

К сожалению, содержимое веб-обозревателя никогда не будет иметь согласованный размер, и использование метода «растяжка для соответствия» неизбежно приведет к тому, что часть содержимого будет отрезана по оси Y. У меня также нет контроля над кодом в веб-просмотре, хотя я мог бы теоретически запустить JS для добавления CSS. –

+0

@TomWalters, похоже, вам нужна лучшая координация с поставщиком контента, и примените некоторый тип принципа дизайна на месте. – Allen

+0

Если это так, это устройство чтения электронных книг, что означает, что нет стандартного размера –

1

изменение размера рамки веб-страницы здесь не совсем корректно. Обработчик LoadFinished запускается после запроса на загрузку [uiwebview loadRequest:] завершен успешно и не означает, что завершение выполнения вашего HTML-контента (DOM) завершено. Несколько примечаний здесь может помочь:

1- быть уверены, что вы включили глазок тег в HTML дизайна для поддержания заполнения аспекта. (В голове)

<meta name="viewport" content="width=device-width, user-scalable=no"> 

2- режим проверки содержимого UIWebView (масштаб, чтобы соответствовать по умолчанию), проверьте Подавите инкрементный Rendering, а при необходимости (в зависимости от дизайна)

3 - практически невозможно поймать, когда элементы Dom загрузили и отобразили в HTML. возможно, вы можете включить в него некоторый загрузчик с таймаутом (не забудьте очистить его при разгрузке страницы)

4- Если у вас есть некоторые стандарты CSS для вашего дизайна, возможно, вам нужно рассмотреть 100% ширину элементов, чтобы заполнить стр.

Если вы используете автозапуск, просто исправьте рамку UIWebview, а не обрабатывайте WebViewFrame при каждом ударе.

Это все, что я могу придумать, удачи.

Смежные вопросы