楼主最近项目中加了视频播放,视频播放的话,肯定会涉及到全屏播放,全屏和小屏好做,主要是旋转.
最开始楼主的视频全屏了,但是模拟器是竖屏.没有自动横过来.这也无所谓,大家会说手机屏幕横过来就可以了
但是,状态栏还在上边,你把手机横过来,状态栏就在左边了.这样的体验,不觉得怪怪的么,也试过隐藏状态栏,但是我觉得这个效果不是我想要的.
也是在逃避遇到的问题,后来楼主找了好多资料,查询研究,经过测试总结,问题解决了.
先说原因吧:
1.如果只有ViewController的话,shouldAutorotate,一定会走的.
2.但是关键是我们项目都是navigationController,shouldAutorotate方法就不会走了.属于方法被navigationController拦截了.这样就需要在你的navigationController基类添加以下代码:
-(BOOL)shouldAutorotate{
return self.topViewController.shouldAutorotate;
}
/**以下两个方法可不写*/
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
returnUIInterfaceOrientationLandscapeRight;
}
3.但是我发现ViewController里的shouldAutorotate还是不执行,我分析了一下,还是被拦截了,原因是我们项目都有tabbarController,也会被这个拦截掉.所以在你的tabbarController的基类里边添加如下代码:
- (BOOL)shouldAutorotate{
return self.selectedViewController.shouldAutorotate;
}
/**以下两个方法可不写*/
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
return UIInterfaceOrientationLandscapeRight;
}
4.最后别忘记在你的ViewController里边添加这个代码:
- (BOOL)shouldAutorotate{
return NO;
}
5.问题得到解决.欢迎批评指正,这个只是一个整理,是自己搜集了别人的说法,和自己的调试,得出的结论,不准确之处欢迎提出来,互相学习.
***********关于此问题的重点更新**********
1、上边的解决办法,是项目采用了系统的UINavigationController和UITabbarController,或者基于系统进行封装的。
2、楼主接手的新项目,发现导航是基于系统封装,而tabbarController是自定义的(实现思路:用UIViewController来实现,底部采用几个按钮,或者collectionView实现均可,然后添加childVc和subview即可)、然后window的rootVc是封装的导航控制器,导航又把封装的tabbarVc设置为rootVc。
然后一般项目中会有很多baseViewController。这样的话,最好在封装的tabbarController(基于UIViewController)和各种baseViewController中也实现
- (BOOL)shouldAutorotate
{ if (!self.childViewControllers.count) return YES;
return self.childViewControllers.lastObject.shouldAutorotate;
}
******另外,关于状态栏style,显示隐藏,iPhoneX底部的indicatior显示隐藏,不执行的话,和上边同一个道理。