旋转后UIWebView内容未调整为新帧

时间:2014-02-17 08:00:00

标签: ios objective-c ipad uiwebview uiscrollview

我有一个电子邮件申请,
它显示UIWebViewUISplitViewController内的内容 一切正常,直到我在UIWebView放大/缩小设备时旋转设备。 旋转设备时,我会调整<{1>}的框架

UIWebView

问题是,当我在- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration中放大/缩小然后旋转设备时 内容未调整为新的帧,这会导致内容中出现灰色/黑色边框,或者内容可以水平滚动。

地址信息: UIWebViewUIWebView上可以滚动的子视图。 当UIScrollView完全可见时,UIWebView的{​​{1}}被禁用,scrollEnabled可以滚动。

Landscape_Correct 上图显示了选择电子邮件时的UIScrollView横向信息 这是两种情况下旋转前的状态。


Portrait_Without_Zooming
[旋转前未缩放] 上图显示UIWebView正在将内容正确调整为新框架的大小。



Portrait_With_Zooming
[旋转前放大] 上图显示放大横向后然后旋转到纵向的UIWebView - &GT;内容未正确显示

UIWebView中的UIWebView的信息:

UIWebView.scrollView 框架是正确的!

编辑:解决方案!!
我设法通过在旋转设备后更新视口宽度来解决它。
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

2 个答案:

答案 0 :(得分:3)

我设法通过在旋转设备后更新视口宽度来解决它

CGFloat fll_width = self.view.frame.size.width;
NSString* adsl_javascript_string = [NSString stringWithFormat:@"var setViewPortScript = document.createElement('meta');\
     setViewPortScript.setAttribute('name', 'viewport');\
     setViewPortScript.setAttribute('content', 'width = %f');\
     document.getElementsByTagName('head')[0].appendChild(setViewPortScript);", fll_width];
[adsc_webview stringByEvaluatingJavaScriptFromString:adsl_javascript_string];

答案 1 :(得分:2)

这似乎也是iOS 7和iOS 8中的一个错误。 修复就是:

首先在布局更改时调整框架大小:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    _webView.frame = self.view.bounds;
}

然后在旋转回调上将zoomScale重置为0.是,0!

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    // Allow the animation to complete
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [_webView.scrollView setZoomScale:0 animated:YES];
    });
}

您也可以使用新功能

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
    // Allow the animation to complete
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [_webView.scrollView setZoomScale:0 animated:YES];
    });
}