最近在用sencha touch在iOS上试着开发一些native-like应用,遇到不少问题,其中之一就是通过UIWebView加载web页面时,如果转动屏幕,里面的Web页面不会自动适配高宽,但是用Safari浏览时却是可以的。
用Safari的Web检查器查看sencha touch生成的页面,发现sencha touch控件生成的HTML元素,都是指定了width/height的,当转动屏幕时,如果只是UIWebView转动,而不重新计算这些HTML元素的width/height,就会导致上述问题。
google了一下,这篇文章
中说Safari中之所以可以自动适配sencha touch产生的HTML元素,是由于Safari在转动屏幕时,会触发document的orientationchange事件,从而sencha touch可以捕获这个事件,重新计算控件产生的HTML元素的高宽,达到自动适配的目的。而UIWebView的orientation是你自己的程序处理的,你也要在获取orientation事件时告诉web的document,方法就是通UIWebView.stringByEvaluatingJavaScriptFromString。但具体如何触发呢?
就是给document产生一个orientationchange事件,剩下的由sencha touch处理好了(sencha touch的所有控件都可以响应这个事件重新计算高宽)。
示例代码:
//add by iame
var e = document.createEvent('Events');
e.initEvent('orientationchange', true, false);
document.dispatchEvent(e);
不需要设置具体是landscape,portrait,只需要设置事件名称对就好了。sencha touch会在处理事件时,自动判断是landscape,还是portrait。
分享到:
相关推荐
之前提到UIWebView使用一个UIScrollView对象来关联web页面的内容,通过UIWebView的scrollView属性即可获得该对象,默认情况下网页长度超出设备视口长度后页面会滚动,用户使用手指滚动页面到页面边距并放开手指后...
1. `loadHtmlCssJsDemo-master`可能是一个示例项目,包含了如何在`UIWebView`中加载包含HTML、CSS和JavaScript的页面,并演示了如何处理页面间的跳转和交互事件。 2. 页面跳转方式: - `window.location.href`:...
描述中的“一个简单的demo实现了对html页面上简单事件的响应”可能指的是在HTML页面中通过JavaScript监听事件(如点击按钮),然后调用`window.location.href`或`window.webkit.messageHandlers`来触发UIWebView的...
4. **返回上页功能**: 要实现"返回上页"的功能,需要保存每个页面的`UIWebView`的历史记录。当用户点击“返回”按钮时,调用`goBack()`方法: ```swift if webView.canGoBack { webView.goBack() } ``` 5. **在...
在提供的`WebView_JS`文件中,可能包含一个简单的HTML页面,用于演示如何在UIWebView中加载H5页面,并实现基本的JavaScript与原生代码交互。通过分析这个示例,开发者可以更直观地了解上述概念。 总之,UIWebView...
在iOS应用开发中,UIWebView是一个非常重要的组件,它允许开发者在应用程序内嵌入网页内容,实现网页浏览功能。...在压缩包中的"Web"文件可能是包含HTML示例页面或其他相关资源,供你在UIWebView中加载和测试。
例如,`webViewDidStartLoad:`方法会在页面开始加载时被调用,`webViewDidFinishLoad:`则在加载完成后触发。 5. **JavaScript交互**:UIWebView支持与JavaScript的交互,你可以通过`...
其中,`canGoBack`和`canGoForward`属性分别表示是否可以回退和前进到历史浏览记录中的页面。`webViewDidStartLoad:`和`webViewDidFinishLoad:`是两个重要的代理方法,分别在网页开始加载和加载完成时被调用,便于...
1. 初始化:UIWebView可以通过初始化方法创建,例如`initWithFrame:frame`,指定一个矩形区域作为web视图的大小。 ```swift let webView = UIWebView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: ...
在iOS开发中,UIWebView是苹果提供的一种非常重要的组件,它允许开发者在应用程序内部嵌入网页内容,实现类似浏览器的功能。这个"UIWebView的使用"示例是一个基础的学习项目,旨在帮助开发者理解如何通过UIWebView...
综上所述,"UIWebView和js交互demo1"项目主要展示了如何在iOS应用中利用UIWebView或WKWebView进行OC与JS的交互,这在实现复杂的混合式应用或者增强原生应用的Web功能时非常有用。通过这种交互方式,开发者可以充分...
总的来说,“UIWebView与javascript的交互三”这个教程是一个实用的资源,可以帮助开发者熟练掌握在iOS应用中使用`UIWebView`进行原生代码与Web内容交互的技巧,这对于构建混合式应用或在原生应用中嵌入复杂的Web...
2. UIWebViewDelegate:设置UIWebView的代理,可以监听到JavaScript的某些事件,比如`shouldStartLoadWithRequest`方法,可以捕获到JavaScript发起的URL请求。 三、JavaScript与Objective-C/Cocoa Touch交互 1. ...
通过UIWebView,开发者可以将丰富的Web交互体验引入到原生应用中,而无需离开应用界面。 二、加载HTML内容 1. 创建UIWebView实例:首先,在 storyboard 或代码中创建UIWebView对象,并将其添加到视图层次结构中。 2...
然而,UIWebView的缺点在于其内存管理不佳,容易导致内存泄漏,同时JavaScript与原生代码的交互效率较低,且不支持现代Web标准。因此,苹果推荐使用WKWebView,这是WebKit框架中的一个新组件。WKWebView使用了更现代...
注意,UIWebView会占用大量内存,因为它会缓存页面内容。在不再使用时,记得调用`removeFromSuperview`来移除并释放资源。 8. **WKWebView替代** 从iOS 8开始,苹果引入了WKWebView,它在性能和安全性上优于...
UIWebView的Delegate通常是一个遵循`UIWebViewDelegate`协议的对象,它能监听并处理UIWebView的各种事件,如页面加载开始、完成、失败等。设置Delegate的方法是: ```swift webView.delegate = self ``` 需要...
这是因为WKWebView提供了更好的性能、安全性以及对现代Web标准的支持。 UIWebView是iOS早期提供的一个组件,用于在应用中嵌入网页内容。然而,由于其存在性能和安全问题,Apple推出了WKWebView,它使用WebKit框架,...
"Demo.zip_DEMO_iphone_uiwebview_uiwebview demo_uiwebview video"这个标题暗示了我们正在讨论的是一个关于在iPhone应用中使用UIWebView播放视频的示例项目。 UIWebView是Apple提供的一个类,它是UIKit框架的一...