UIWebView content not adjusted to new frame after rotation(旋转后 UIWebView 内容未调整为新框架)
问题描述
我有一个电子邮件应用程序,
它显示 UISplitViewController 内的
UIWebView
中的内容.
一切正常,直到我旋转设备,当已经在 UIWebView
中放大/缩小.旋转设备时,我在
UIWebView
的框架- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 持续时间:(NSTimeInterval)duration
问题是,当我在 UIWebView
中放大/缩小然后旋转设备时.
内容未根据新框架调整大小,这会导致内容中出现灰色/黑色边框,或者内容可以水平滚动.
附加信息:UIWebView
是 UIScrollView
上的子视图,可以滚动.当UIWebView
完全可见时,UIScrollView
的scrollEnabled
被禁用,UIWebView
可以滚动.p>
上图是选择邮件时的横向UIWebView
.
这是两种情况下轮换前的状态.
[旋转前未缩放]上图显示 UIWebView
正确地将内容调整为新框架.
[旋转前缩放]上图为横向放大后旋转为纵向后的UIWebView
-> 内容显示不正确
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
:
中UIWebView.scrollView
的信息<_UIWebViewScrollView: 0xb1322a0;帧 = (0 0; 768 960);clipsToBounds = YES;自动调整大小 = H;手势识别器 = <NSArray: 0xb1321d0>;层=<CALayer:0xb132270>;contentOffset: {0, 0}>
框架是正确的!
解决方案!!
我设法通过在旋转设备后更新视口宽度来解决它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];
我设法通过在旋转设备后更新视口宽度来解决它
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];
I have an e-mail application,
which shows the content in an UIWebView
inside an UISplitViewController
.
Everything works fine until i rotate the device, when already zoomed in/out in the UIWebView
.
When rotating the device, i adjust the frame of the UIWebView
in
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
The problem is, when i zoomed in/out in the UIWebView
and then rotate the device.
The content isn't resized to it's new frame, which leads to a gray/black border in the content, or the content can be scrolled horizontal.
Addional information:
The UIWebView
is a subview on a UIScrollView
which can be scrolled.
When the UIWebView
is totally visible the scrollEnabled
of the UIScrollView
is disabled and the UIWebView
can be scrolled.
Above picture shows the UIWebView
in landscape when selecting an email.
This is the state before rotating in both cases.
[Not zoomed before rotating]Above picture shows that the UIWebView
is correctly resizing the content to it's new frame.
[Zoomed before rotating]Above picture shows the UIWebView
after zooming in landscape and then rotating to portrait
-> content isn't correctly shown
Information of the UIWebView.scrollView
in
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
:
<_UIWebViewScrollView: 0xb1322a0; frame = (0 0; 768 960); clipsToBounds = YES; autoresize = H; gestureRecognizers = <NSArray: 0xb1321d0>; layer = <CALayer: 0xb132270>; contentOffset: {0, 0}>
frame is correct!
Edit: Solution!!
i managed to solve it by updating the viewport width after rotating the device
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];
i managed to solve it by updating the viewport width after rotating the device
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];
这篇关于旋转后 UIWebView 内容未调整为新框架的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:旋转后 UIWebView 内容未调整为新框架
基础教程推荐
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01