关于shouldAutorotate不执行的问题

楼主最近项目中加了视频播放,视频播放的话,肯定会涉及到全屏播放,全屏和小屏好做,主要是旋转.

最开始楼主的视频全屏了,但是模拟器是竖屏.没有自动横过来.这也无所谓,大家会说手机屏幕横过来就可以了

但是,状态栏还在上边,你把手机横过来,状态栏就在左边了.这样的体验,不觉得怪怪的么,也试过隐藏状态栏,但是我觉得这个效果不是我想要的.

也是在逃避遇到的问题,后来楼主找了好多资料,查询研究,经过测试总结,问题解决了.


先说原因吧:

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.问题得到解决.欢迎批评指正,这个只是一个整理,是自己搜集了别人的说法,和自己的调试,得出的结论,不准确之处欢迎提出来,互相学习.


猜你喜欢

转载自blog.csdn.net/zhaotao0617/article/details/51131038
今日推荐