我有一个电子邮件申请,
它显示UIWebView
内UISplitViewController
内的内容
一切正常,直到我在UIWebView
放大/缩小设备时旋转设备。
旋转设备时,我会调整<{1>}的框架
UIWebView
问题是,当我在- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
中放大/缩小然后旋转设备时
内容未调整为新的帧,这会导致内容中出现灰色/黑色边框,或者内容可以水平滚动。
地址信息:
UIWebView
是UIWebView
上可以滚动的子视图。
当UIScrollView
完全可见时,UIWebView
的{{1}}被禁用,scrollEnabled
可以滚动。
上图显示了选择电子邮件时的UIScrollView
横向信息
这是两种情况下旋转前的状态。
[旋转前未缩放] 上图显示UIWebView
正在将内容正确调整为新框架的大小。
[旋转前放大] 上图显示放大横向后然后旋转到纵向的UIWebView
- &GT;内容未正确显示
UIWebView
中的UIWebView
的信息:
UIWebView.scrollView
框架是正确的!
编辑:解决方案!!
我设法通过在旋转设备后更新视口宽度来解决它。
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
答案 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];
});
}