2016-04-14 40 views
7

W systemie iOS 9.2 można polecić renderowanie kodu HTML WKWebView o tabelach o stałej szerokości większej niż szerokość urządzenia poprzez dodanie znacznika viewport w następujący sposób:Okno podglądu WKWebView nie działa w systemie iOS 9.3

<meta name="viewport" content="width=device-width, shrink-to-fit=YES"> 

linia ta spowodowała WKWebView skutecznie pomniejszyć rzutnię tak, że cała strona dopasowanie świadczonych w ramce widokowej bez potrzeby przewijania. Na przykład, rozważmy następujący kod, jeśli jest uruchomiony w viewDidLoad w waniliowym pojedynczej aplikacji Widok:

WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init]; 
WKWebView *newWebView = [[WKWebView alloc] initWithFrame:CGRectMake(0,40,self.view.frame.size.width, self.view.frame.size.height - 40) configuration:wkWebConfig]; 
NSString *toRender = @"<head><meta name=\"viewport\" content=\"width=device-width, shrink-to-fit=YES\"></head><body><table width=700 style='background-color: blue; color:white; font-size=20px'><tr><td>this is some text that is long enough to exceed the width of the iphone 6 unless shrink-to-fit is applied</td></tr></table></body>"; 
[newWebView loadHTMLString:toRender baseURL:nil]; 
[self.view addSubview:newWebView]; 

Zawartość czyni tak:

enter image description here

Jednak to zachowanie zmieniło się w 9.3. Identyczny kod uruchomiony w 9.3 czyni tak:

enter image description here

(Chociaż nie można go zobaczyć na zrzucie ekranu znajduje się pasek przewijania poziomego)

Masz inne pytania na StackOverflow i gdzie indziej, to Wygląda na to, że większość ludzi woli zachowanie 9.3. Jednak potrzebuję zachowania 9.2, dopasowania do shrink-to-fit. Moje pytanie brzmi: czy ktokolwiek wie, jak uzyskać takie samo zachowanie dopasowujące w 9.3? Czy ktoś wie, czy ta zmiana jest zamierzona, czy błąd, który zostanie naprawiony w kolejnych wydaniach?

Mój kod testu można znaleźć na https://github.com/nsolter/NSWebViewShrinkTest konkretnie https://github.com/nsolter/NSWebViewShrinkTest/blob/master/NSWebViewShrinkTest/ViewController.m

Odpowiedz

6

I złożył raport o błędzie z Apple, a to jest odpowiedź:

„Nie, nie chcemy, aby utrzymać się termokurczliwą -fit zachowanie. Aby obejść, użyj metatagu z widocznym obszarem, który poprawnie opisuje szerokość treści. "

Wypróbowałem to. Jeśli w znaczniku rzutni określisz szerokość rzeczywistej szerokości html po jego wyrenderowaniu, zostanie ona poprawnie wyświetlona na szerokości urządzenia. W powyższym przykładzie, o szerokości stołu wynoszącej 700, jeśli podasz: <meta name=\"viewport\" content=\"width=700, shrink-to-fit=YES\">

Następnie strona będzie wyświetlana bez poziomych pasków przewijania.

Należy jednak pamiętać, że nie można określić właściwości rzutni początkowej skali. Wtedy nie wyświetla się z właściwą szerokością.

Jest to oczywiście mniej niż idealne, ponieważ zazwyczaj nie wiesz, jaka będzie szerokość renderowanego html, dopóki go nie wyrenderujesz. Moje obecne rozwiązanie polega na renderowaniu go raz za pomocą width = device-width, a następnie renderowania go ponownie za pomocą width = X, gdzie X jest faktyczną szerokością renderowanej strony za pierwszym razem.

+0

Używam również width = device-width i widzę ten sam problem. Czy ponownie ładujesz stronę o szerokości = X? – anoop4real

+0

Zasadniczo tak. W rzeczywistości renderuję go w nowym WKWebView, który nie jest aktualnie wyświetlany, a następnie zamienia się w tę nową przeglądarkę internetową. –

+1

Czy masz kilka próbek? – anoop4real

Powiązane problemy