1、背景:公司最近做一个所谓的HTML5版本的APP,说白了就是做一个网页,然后安卓和iOS用webView来加载这个网页。这种情况iOS整个项目就一个ViewController,但是某个页面是需要支持竖屏和横屏的,屏幕旋转为横屏后调用JS让网页适应横屏布局。
2、控制屏幕方向和调用JS方法:
- (
NSUInteger
)supportedInterfaceOrientations
{
//
_isCanChangeOrientation根据网页的链接来赋值YES or NO
if
(
_isCanChangeOrientation
) {
return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortrait ;
} else {
return UIInterfaceOrientationMaskPortrait ;
}
}
- ( void )willAnimateRotationToInterfaceOrientation:( UIInterfaceOrientation )toInterfaceOrientation duration:( NSTimeInterval )duration
{
switch (toInterfaceOrientation) {
case UIInterfaceOrientationLandscapeLeft :
case UIInterfaceOrientationLandscapeRight :
// 横屏显示的时候,调用 JS 方法
[ _mWebView stringByEvaluatingJavaScriptFromString : @"setOrientation4H5(\"0\");" ];
break ;
default :
break ;
return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortrait ;
} else {
return UIInterfaceOrientationMaskPortrait ;
}
}
- ( void )willAnimateRotationToInterfaceOrientation:( UIInterfaceOrientation )toInterfaceOrientation duration:( NSTimeInterval )duration
{
switch (toInterfaceOrientation) {
case UIInterfaceOrientationLandscapeLeft :
case UIInterfaceOrientationLandscapeRight :
// 横屏显示的时候,调用 JS 方法
[ _mWebView stringByEvaluatingJavaScriptFromString : @"setOrientation4H5(\"0\");" ];
break ;
default :
break ;
}
}
3、坑?
在- (
NSUInteger
)supportedInterfaceOrientations;这个方法打了一个断点,运行项目,旋转屏幕。发现这个方法只进来一次,而我记得这个方法是设备检测到旋转都会进来的。后来发现是因为ViewController套了一个NavigationViewController,去掉NavigationViewController后,再运行旋转屏幕,每次旋转都进到这个方法了。
}