UIWebView内容偏移
我想显示在我的应用程序的UIWebView的google.mapsurl,但页面出现在这个我想要的不同点。 我尝试了很多问题的一切,如设置webview.scrollview的contentOffset或contentInset或ScrollsToTop,甚至与JavaScript的命令,但他们都没有工作。所以这是问题:
这是我希望得到的预期结果:
我希望我的网页在上面而不是在中间。
url : url
这与内容偏移等无关 – 它是在加载完成后向下滚动的页面本身。 在Mobile Safari中加载URL时,您将看到完全相同的行为,甚至可以观察到滚动animation。
不幸的是,没有什么可以做的,以防止它,除了提取滚动代码从服务器提供的HTML之前,加载到web视图。 这将是乏味的,你不应该这样做,因为这可能会打破你的应用程序一旦由谷歌进行的内部工作的网页。
我现在唯一能想到的解决scheme就是在页面向下滚动后,将页面滚动回页首。 我已经与你提供的url一起尝试过,它很有效。 为此,在您的webview委托中实现webViewDidFinishLoad:
-(void)webViewDidFinishLoad:(UIWebView *)webView { NSTimer *scrollTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(scrollBackToTop) userInfo:nil repeats:NO]; // Better make the timer an ivar }
并实现如下方法:
-(void)scrollBackToTop { NSString* javascript = [NSString stringWithFormat:@"window.scrollTo(0, 0);"]; [theWebView stringByEvaluatingJavaScriptFromString:javascript]; }
这当然意味着你的webview会首先向下滚动,只能跳回顶端,这相当难看。 所以你可能想隐藏webview后面的一个不透明的视图,包含一个活动指标或类似的东西,直到webview已经加载并完成了所有的滚动动作…
尽pipe如此,虽然这样做的可能性较小,致命性也较低,但这也可能会打破。 当我尝试我的解决scheme时,2秒的延迟就足够了。 如果谷歌在未来减慢animation,2秒可能是不够的,你的scrollBackToTop方法提前触发。 由于java脚本不会取消正在进行的滚动,因此它将不会回滚到顶部。
编辑:
也许我有更好的东西给你…
在webViewDidFinishLoad方法中执行以下操作:
NSString* javascript = [NSString stringWithFormat:@"document.getElementById('panel').style.position='fixed'; document.getElementById('panel').style.top='50px';"]; [webView stringByEvaluatingJavaScriptFromString:javascript];
这将完全抑制滚动animation。 但是它的代价是:如果用户现在手动滚动webview,表单字段保持固定位置,而页面的其余部分则正常滚动。
所以你需要撤消黑客,这样做:
NSString* javascript = [NSString stringWithFormat:@"document.getElementById('panel').style.position='absolute'; document.getElementById('panel').style.top='0px';"]; [theWebView stringByEvaluatingJavaScriptFromString:javascript];
在滚动脚本完成之后,您需要再次延迟执行第二步,否则页面将执行完整滚动。 对我来说,1.2秒的延迟是个诀窍。
您可能想通过禁用webviews滚动视图上的滚动来防止用户在1.2秒内滚动,直到定时器激活。
所以还有改进的空间,但是这种方法可能会让你的应用感觉更有反应,相比于隐藏webview直到它滚动来回…
- 不能通过点击UITextVIew中的邮件链接显示MFMailComposeViewController(iOS 8 beta bug)
- 如何消除一堆模态视图控制器与animation,而不会在屏幕上闪烁任何提交的VC之间的顶部和底部?
- 无法在iPhone应用程序中添加某些字体
- UIKIT APP的基础知识(MVC和MVVM)
- Swift,parse.com:如何从查询中传递数据
- didReceiveRemoteNotification:fetchCompletionHandler:仅在连接到xcode时在后台调用
- asm(“陷阱”)在64位iOS设备上
- 在iOS中布局视图的快速指南
- 没有任何有效的供应configuration文件包含设备