2010-07-23 16 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]; 
    } 
} 

所以加载的网页视图图像,并且图像将重置它的大小在旋转时。

相关问题