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

 

***********关于此问题的重点更新**********

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显示隐藏,不执行的话,和上边同一个道理。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值