之前写好的一个AVPlayer封装,挪用到另一个项目中不能强制转屏了,各种检查注释验证,最后找到问题的根源,竟然是因为主标签控制器的构造方法写的有问题,用的是一个第三方的,继承自UITabBarController,在构造方法的实现里没有调用父类的初始化方法。
原本写的是这样,
- (instancetype)initWithViewControllers:(NSArray<UIViewController *> *)viewControllers imageList:(NSArray<UIImage *> *)imageList selectedImageList:(NSArray<UIImage *> *)selectedImageList titleList:(NSArray<NSString *> *)titleList configureModel:(XXX *)configureModel
{
<#someCode#>
return self;
}
增加调用父类初始化代码后,问题解决。
- (instancetype)initWithViewControllers:(NSArray<UIViewController *> *)viewControllers imageList:(NSArray<UIImage *> *)imageList selectedImageList:(NSArray<UIImage *> *)selectedImageList titleList:(NSArray<NSString *> *)titleList configureModel:(XXX *)configureModel
{
self = [super init];
<#someCode#>
return self;
}
不知道这个初始化做了哪些东西,但确实影响到了强制转屏方法的成功调用。撇开这个主标签控制器的问题,把AVPlayer所在的控制器从push进入改为present后是可以强制转屏的,可能是模态出来后不再受那个问题的影响了。