4

我有这个元标记:

<meta name="viewport" content="width=768, minimum-scale=1.0, user-scalable=no" />

我正在设置 scalesPageToFit:

webView.scalesPageToFit = YES;

起初,这可以正常工作。当我从纵向转到横向时,它会放大,因此设备的宽度始终为 768px。我可以毫无问题地来回走动(纵向<->横向)。

一旦我激活虚拟键盘,无论是通过 contentEditable 还是文本区域,它都会完全停止工作,即使在我关闭键盘之后也是如此。

这是 UIWebView 中的错误吗?我还需要做些什么来完成这项工作吗?有没有我可以使用的解决方法?无论方向如何,宽度都必须为 768px。

4

2 回答 2

1

似乎是 Apple 的私有类 UIDocumentView 的一个错误。无论出于何种原因viewportConfigurationsDidChange,在激活键盘后都会卡在缩放比例上,这是通过调用来设置的_setDocumentScale。例如,当它应该更改为 1.333 时,它会卡在 1.0 上。

通过为 UIWebDocumentView 编写一个类别是“可修复的”,它是 UIDocumentView 的子类,不实现这些方法(因此您可以调用超级类)。

尽管我尽了最大的努力,但我还是找不到使用公共 API 解决此问题的方法。我尝试弄乱 UIScrollView 的缩放级别,但我永远无法让它正常工作。内容会发生变化,还会发生其他奇怪的事情。甚至尝试使用 JavaScript 来实现。

所以修复它的唯一方法是通过私有类的类别。

这永远不会在应用商店中获得批准。

所以在苹果解决这个问题之前,SOL。

于 2012-10-28T07:41:53.920 回答
0

警告:此解决方案使用私有 API。任何使用此代码的应用都可能被应用商店拒绝。我发布它是为了让人们至少有一个可行的解决方案。

@interface UIWebDocumentView : UIView
- (void)_setDocumentScale:(float)scale;
@end

@interface UIWebView (DocumentView)
- (UIWebDocumentView *)_documentView;
@end

- (void)resetScale:(UIWebView *)webView
{
    UIWebDocumentView *webDocumentView = [webView _documentView];
    CGFloat contentWidth = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollWidth;"] floatValue];
    CGSize viewSize = webView.bounds.size;
    float scale = viewSize.width / contentWidth;
    [webDocumentView _setDocumentScale:scale];
}

resetScale在 web 视图的边界改变后调用。

于 2013-11-21T20:17:03.650 回答