显示键盘后,UIWebView上的scalesPageToFit会断开吗?

我有这个元标记:

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

我正在设置scalesPageToFit:

 webView.scalesPageToFit = YES; 

起初这工作正确。 当我从纵向到横向放大时,设备的宽度始终为768px。 我可以来回没有问题(肖像< – >风景)。

只要我激活虚拟键盘,无论是通过contentEditable还是文本区域,即使在closures键盘之后,它都会完全停止工作。

这是UIWebView中的错误吗? 还有什么我需要做的,以使这项工作? 有没有可以使用的解决方法? 宽度,不pipe方向,必须是768px。

似乎是苹果的私人类UIDocumentView的错误。 出于什么原因, viewportConfigurationsDidChange在键盘被激活后通过调用_setDocumentScale来设置缩放比例。 例如,当它应该变成1.333时,它会卡在1.0上。

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

尽pipe我尽了最大努力,但我找不到使用公共API修复此问题的方法。 我试图搞乱UIScrollView的缩放级别,但我永远不能得到这个正常工作。 内容将会转移,其他奇怪的事情将会发生。 甚至尝试过用JavaScript来做。

所以解决这个问题的唯一方法就是通过私人课程进行分类。

这绝不会在app store中被批准。

所以直到苹果修复这个,SOL。

警告:此解决scheme使用私有API。 任何使用此代码的应用程序可能会被应用程序商店拒绝。 我张贴它,所以人们至less有一个工作的解决scheme。

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

在Web视图边界更改后调用resetScale