全屏设置setStatusBarOrientation 未生效的解决办法
In
常见问题
visitors
最近在一个项目中用到了视频播放组件,并且项目要求视频能够边下边播,并且需要实现视频的缓存,如果下次播放就不要再通过网络去访问播放,而是直接读取本地的缓存文件播放。在实现让视频全屏播放的时候遇到了比较难搞的问题,当视频全屏的时候,视频成功旋转过来了,,但是状态栏的方向始终不能旋转过来。
手动调用了如下代码,但是并没有什么卵用:
1 | [[UIApplication sharedApplication]setStatusBarOrientation:UIInterfaceOrientationLandscapeRight]; |
经过一番搜索,网上给了各种方法,归纳起来大致是这个样子的:
- 首先在Info.plist中设置View controller-based status bar appearance为NO
- 需要旋转的视频ViewController的方法
- (BOOL)shouldAutorotate要返回NO,不然手动旋转不会生效。
Tips:本以为到了这里问题就应该已经解决了,but问题并没有得到解决,覆写
- (BOOL)shouldAutorotate方法并为生效,或许此时你一定会说:”WTF?”
最后的原因是:由于UIViewController放置在Navigation中,而由于Navigation不人性化的设计,navigation的- (BOOL)shouldAutorotate是不会根据显示ViewController的- (BOOL)shouldAutorotate设置的值来改变的。
最后最终的解决办法是将下面这段代码放在AppDelegate.m的最后面,这个时候NavigationController就会根据你显示的ViewController改变返回值了,然后再去ViewController覆写方法,返回NO,方法生效了!
1 | @implementation UINavigationController (Rotation) |