2015-12-11 14 views
7

Mam UIWebView, w którym zawartość jest skalowana do rozmiaru. Rozmiar strony internetowej jest następnie dostosowywany do zawartości (patrz poniżej) i działa zgodnie z oczekiwaniami.Rozmiar UIWebView zmienia się na loadRequest

Podgląd strony ma również gest machnięcia dołączony do ładowania nowych stron - podczas wykonywania loadRequest na webview dla następnej strony następuje chwilowe migotanie do początkowej szerokości widoku internetowego. Potwierdziłem, że ramka jest zmieniana przy użyciu NSTimer i UILabel s, aby wyświetlić szerokość ramki.

Oto kod do ponownego zaklejania:

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; 
} 

Kod ten jest nazywany przez LoadFinished delegata na WebView.

Próbowałem ustawić ramkę przewijania widoku przeglądarki i rozmiaru widoku WWW ContentSize.

Co może powodować migotanie?

flickering webview

+0

człowiek, spróbuj sprawdzić teraz wiele razy 'LoadFinished' jest wywoływana. Pomyśl, że istnieje problem. Spróbuj też użyć innego html (np. Strony Apple?). –

Odpowiedz

2

UIWebView za webViewDidFinishLoad delegat będzie wywoływana wielokrotnie podczas ładowania strony i ewentualna przyczyna Flick masz inny rozmiar dla swoich stron i staramy się dopasować je przez zmianę ramki UIWebView do rozmiar treści (zgodnie z kodem), dlaczego po prostu nie naprawiłeś ramki UIWebView i nie pasujesz do swojego interfejsu UIWebView? z samą "szerokością: 100%" na stronie css!

+0

Niestety zawartość widoku nigdy nie będzie zgodna z rozmiarem, a użycie metody "rozciągnij, aby dopasować" nieuchronnie spowoduje odcięcie części treści na osi Y. Nie mam też kontroli nad kodem w widoku internetowym, chociaż teoretycznie mógłbym uruchomić JS, aby dodać CSS. –

+0

@TomWalters wygląda na to, że potrzebna jest lepsza koordynacja z dostawcą treści i zastosowanie jakiejś formy głównej projektu. – Allen

+0

Jeśli tylko, to czytnik e-booków oznacza, że ​​nie ma standardowego rozmiaru –

1

zmiana rozmiaru ramki w widoku tutaj nie jest całkiem poprawna. Program obsługi LoadFinished uruchamia się, gdy żądanie obciążenia [uiwebview loadRequest:] zakończyło się pomyślnie i nie musi oznaczać, że wykonanie zawartości HTML (DOM) zostało zakończone. Kilka uwag tutaj może pomóc:

1- upewnij się, że w projekcie HTML uwzględniono znacznik portu widoku, aby zachować aspekt wypełnienia. (W głowie)

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

2- wyboru trybu zawartości UIWebView (skala dopasować ustawienie domyślne), Sprawdzić wyciszyć przyrostową Rendering a także w razie potrzeby (w zależności od projektu)

3 - praktycznie nie ma sposobu, aby złapać, gdy elementy Dom zostały załadowane i wyrenderowane w HTML. być może można dołączyć jakąś ładowarkę tam, z timeout (pamiętaj, aby usunąć go na stronie rozładunku)

4- Jeśli masz jakieś standardy CSS dla projektu może trzeba rozważyć 100% szerokości elementów wypełnić strona.

Jeśli korzystasz z autolayout, po prostu popraw ramkę UIWebview zamiast obsługiwać WebViewFrame przy każdym przesunięciu.

To wszystko, co mogę wymyślić, Powodzenia.