ios16 观看视屏广告后强制转屏失败

if (@available(iOS 16.0, *)) {

   [_viewController.navigationController setNeedsUpdateOfSupportedInterfaceOrientations];
   UIInterfaceOrientationMask  faceOrientationMask = UIInterfaceOrientationMaskLandscapeRight;
   NSArray *array = [[[UIApplication sharedApplication] connectedScenes] allObjects];
   UIWindowScene *ws = (UIWindowScene *)array[0];
   UIWindowSceneGeometryPreferencesIOS *geometryPreferences = [[UIWindowSceneGeometryPreferencesIOS alloc] init];
   geometryPreferences.interfaceOrientations = faceOrientationMask;
   [ws requestGeometryUpdateWithPreferences:geometryPreferences
                               errorHandler:^(NSError * _Nonnull error) {
       NSLog(@"-------SetOrientation------------%@",error);
       //业务代码
   }];
}

有没有大佬能指点一下呀,感谢

UIWindowSceneGeometryPreferencesIOS *geometryPreferences = [[UIWindowSceneGeometryPreferencesIOS alloc] init];
geometryPreferences.interfaceOrientations = faceOrientationMask;

改成
UIWindowSceneGeometryPreferencesIOS * geometryPreferences = [[UIWindowSceneGeometryPreferencesIOS alloc]initWithInterfaceOrientations: faceOrientationMask];

试试看

还是不行。

_viewController.navigationController
你这边使用navigationController的原因是什么呢?
试试看直接使用_viewController

上面的代码是我在网上找的教程。
现在改成如下:
if (@available(iOS 16.0, *)) {
// setNeedsUpdateOfSupportedInterfaceOrientations 方法是 UIViewController 的方法
[ _viewController setNeedsUpdateOfSupportedInterfaceOrientations];
NSArray *array = [[[UIApplication sharedApplication] connectedScenes] allObjects];
UIWindowScene *scene = [array firstObject];
// 屏幕方向
// UIInterfaceOrientationMask orientation = UIInterfaceOrientationLandscapeRight;
UIWindowSceneGeometryPreferencesIOS *geometryPreferencesIOS = [[UIWindowSceneGeometryPreferencesIOS alloc] initWithInterfaceOrientations:UIInterfaceOrientationMaskLandscape];
// 开始切换
[scene requestGeometryUpdateWithPreferences:geometryPreferencesIOS errorHandler:^(NSError * _Nonnull error) {
NSLog(@“错误:%@”, error);
}];
}

当手机竖排方向锁定打开时,转屏依然无效,当手机竖排方向锁定关闭时,可成功转屏。