2010-07-23 5 views
9

Ich habe die letzte Woche für die Antwort auf diese Frage gesucht.Wie setze ich den Zoom von UIWebView zurück? Ich verwende bereits skalsPagesToFit = YES;

Ich habe ein UIWebView, in einem UIScrollView. Alles funktioniert gut, aber ich möchte den Inhalt des UIWebView seinen Zoom zurücksetzen, wenn sich die Ausrichtung ändert.

Im HTML innerhalb des UIWebView, setze ich die Breite des Ansichtsfensters (mit einem Meta-Tag) auf "Device-Breite" und dann auf der Obj-C-Seite, setze ich die scalesPagesToFit = YES;

Ich habe versucht, den Zoom mit Javascript zurückzusetzen; durch Ersetzen der Meta-Tags in Runtime; Neuladen; Zugreifen auf das UIScrollView innerhalb des UIWebView; usw.

aber ohne Erfolg.

Jeder von euch Götter wissen einen Workaround?

Das einzige, das ich denke ab kann, ist die UIWebViews jedes Mal, wenn wir die Ausrichtung zu ändern neu zu erstellen, aber das macht sie während Rendering-Inhalte weißen Blitz, der alle Gedanken schrecklich :(

aussieht?

vielen dank, Andre

+0

Vielleicht ist der Trick beim Wiederaufbau der Webviews? Ich habe es ausprobiert, aber sie blinken weiß, wegen des Moments, in dem sie ihren Inhalt verlieren, also sieht es nicht gut aus. Irgendwelche anderen Problemumgehungen? – Andre

+0

Shot im Dunkeln, aber ich denke, dass die mobile Version der Wikipedia-Seite dies tut. Sie könnten einen Höhepunkt bei seinem HTML/Javascript nehmen. – Douglas

Antwort

8

ich kann nur raten hier und habe nicht versucht, aber AFAIK ein UIWebView ein UIScrollView Kind hat also in der Lage sein sollte zu tun.

for (UIScrollView *scroll in [myWebView subviews]) { 
    // Make sure it really is a scroll view and reset the zoom scale. 
    if ([scroll respondsToSelector:@selector(setZoomScale:)]) 
     [scroll setZoomScale:1.0]; 
} 
+0

Wissen Sie, ob dies die Genehmigung des App Stores durchlässt oder eine private API ist? Prost, Andre – Andre

+1

Das sollte völlig in Ordnung sein. Ich habe einen Artikel gesehen, der die gleiche Technik verwendet, um das Springen der Ansicht zu deaktivieren, wenn es das Ende erreicht. Hier werden nur öffentliche APIs verwendet, also kann sich Apple nicht beschweren. Wenn Apple beschließt, UIWebView so zu ändern, dass kein UIScrollView-Kind mehr verwendet wird, stürzt dieser Code nicht ab, der Zoom wird nicht mehr zurückgesetzt. – DarkDust

+1

Kühl. Nur damit du es weißt, ich habe diesen Code schon einmal ausprobiert und es hat nicht funktioniert. Ich habe festgestellt, dass, um es (in meinem Fall) funktionieren zu lassen, zuerst die Meta-Tags im HTML-Code ersetzt werden müssen, um die Maximalskalierung des Viewports wieder auf 1.0 zu setzen und dann setZoomScale aufzurufen. – Andre

1

Wenn Sie es tun wollen programmatisch ist dies die einzige Art, wie ich es tun finden konnten: (Ihre eigenen Größen angeben, wenn Sie wollen, ich versuchte, nachdem er in ein Formularfeld eingeben, um zu verkleinern)

UIScrollView *sv = [[webViewView subviews] objectAtIndex:0]; 
[sv zoomToRect:CGRectMake(0, 0, sv.contentSize.width, sv.contentSize.height) animated:YES]; 
1

Update: Downscaling war nicht richtig funktioniert, wenn

[[[webView subviews] lastObject] setZoomScale:0.25]; 

die Qualität der Bilder mit auf der Seite verkleinert werden, war schrecklich. Doing:

[[[webView subviews] lastObject] setZoomScale:0.25 animated:YES]; 

Fixed es. Die letzte Zeile ist also diejenige, die Sie verwenden können.

webView wurde von einem UIWebView subclassiert, das auf einer IB-Datei liegt. Ich habe den Viewport überhaupt nicht benutzt. Ich finde, dass man wählen sollte, indem man dies entweder von der Cocoa Touch Seite macht oder JS benutzt.

I verwendet:

webView.scalesPageToFit = YES; 

Ich frage mich, ob es einen Weg, um die scalesPageToFit zurückzusetzen.

3

Auf iOS 5+ haben Sie Zugriff auf scrollView. Nur tun:

[webView.scrollView setZoomScale: 1.0];

+0

es funktioniert gut, danke. Das ist viel einfacher als die for-Schleife. Aber wie @Andre in einem Kommentar zu der akzeptierten Antwort sagte, müssen Sie zuerst die Meta-Tags im HTML-Code ersetzen, um die Maximalskalierung des Viewports wieder auf 1.0 zu setzen –

0

von Antwort des Captnwalker1 Anpassung, kam ich mit auf den Punkt:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    if(toInterfaceOrientation ==UIInterfaceOrientationPortrait||toInterfaceOrientation==UIInterfaceOrientationMaskPortraitUpsideDown) 
    { 
     currentScrollView = [[webView subviews] objectAtIndex:0]; 
     [currentScrollView zoomToRect:CGRectMake(0, 0, currentScrollView.contentSize.width, currentScrollView.contentSize.height) animated:NO]; 
    } 
    else 
    { 
     currentScrollView = [[webView subviews] objectAtIndex:0]; 
     [currentScrollView zoomToRect:CGRectMake(0, 0, currentScrollView.contentSize.width, currentScrollView.contentSize.height) animated:NO]; 
    } 
} 

Ihre webview Bild So laden, und das Bild wird zurückgesetzt es Größe ist, wenn sie gedreht.

Verwandte Themen