2010-07-23 17 views
9

我一直在尋找過去一週的答案這個問題。如何重置UIWebView的縮放?我已經在使用scalesPagesToFit = YES;

我有一個UIWebView,在UIScrollView裏面。一切都很好,但我希望UIWebView的內容在方向更改時重置其縮放。

在UIWebView中的HTML中,我將視口的寬度(w/a元標記)設置爲「device-width」,然後在Obj-C一側,我設置了scalesPagesToFit = YES;

我試過用javascript重置縮放;通過在運行時替換元標記;重裝;訪問UIWebView內部的UIScrollView; etc ...

但沒有成功。

你們哪一個神都知道解決方法?

唯一一個我能想到是我們每次改變方向的時間來重新創建UIWebViews中,但是這使得它們閃爍的白色,同時呈現的內容,這看起來很可怕:(

有什麼想法?

非常感謝, 安德烈

+0

也許訣竅在於重建webviews?我已經嘗試過了,但由於那一刻他們失去了內容,所以它們閃爍白色,因此看起來不太好。任何其他解決方法? – Andre 2010-07-27 09:01:47

+0

在黑暗中拍攝,但我認爲維基百科網站的移動版本可以做到這一點。你可以在html/javascript上取得一個高峯。 – Douglas 2010-09-03 11:14:27

回答

8

我只是猜測這裏並沒有嘗試過,但據我所知一個UIWebView有一個UIScrollView孩子所以要能夠做到:

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

你知道這是否會通過App Store的批准,還是它是一個私人API?乾杯,安德烈 – Andre 2010-09-04 09:58:46

+1

這應該是非常好的。我見過一篇文章使用相同的技術在視圖到達結尾時關閉視圖的彈跳。這裏只使用公共API,所以Apple沒有任何抱怨。如果Apple決定將UIWebView更改爲不再使用UIScrollView子代,則此代碼不會崩潰,它不會再重置縮放。 – DarkDust 2010-09-04 10:09:02

+1

很酷。只是你知道,我以前試過這個代碼,它不工作。我發現要使它工作(在我的情況下),您需要先替換HTML中的元標記,將視口的最大比例重新更改爲1.0,然後調用setZoomScale。 – Andre 2010-09-06 09:13:58

1

如果你想這樣做編程,這是我能找到完成它的唯一方法:(如果你願意,我試圖鍵入到表單字段之後縮小指定自己的尺寸)

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

更新:使用

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

被按比例縮小頁面上的圖像的質量是可怕的,當 降尺度而不能正常工作。做:

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

修復它。所以最後一行是你可以使用的。

webView是UIWebView的子類,它位於某個IB文件上。我根本沒有使用視口。我發現應該從Cocoa Touch那邊做這個選擇,或者使用JS。

我用:

webView.scalesPageToFit = YES; 

我不知道是否有重置scalesPageToFit的一種方式。

3

在iOS 5+上,您可以訪問scrollView。 只要做:

[webView.scrollView setZoomScale:1。0];

+0

它運作良好,謝謝。這比for循環簡單。但@Andre在對已接受的答案發表評論時說,您需要先替換HTML中的元標記以將視口的最大比例重新更改爲1.0 – 2016-10-04 06:38:31

0

從Captnwalker1的答案適應,我想出了這個:

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

所以加載的網頁視圖圖像,並且圖像將重置它的大小在旋轉時。

相關問題