提问人:Stéphane Lapointe 提问时间:5/18/2022 更新时间:5/19/2022 访问量:264
如何仅在 iOS 15.4.1 上强制某个 viewController 的方向?
How can I force orientation for a certain viewController only for iOS 15.4.1?
问:
我有一个可以在 iPad 和 iPhone 上运行的应用程序。出于 x 原因,我需要对特定 viewController 的方向进行硬编码。我们还能在 ios 15.4.1 上使用 Objective-c 做到这一点吗?我知道这个问题过去曾被问过,但我找不到任何答案,他们在以前的 ios 版本中被问到。
我试过这个:
-(BOOL)shouldAutorotate {
return YES;
}
-(UIInterfaceOrientationMask)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
而这个:
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationMaskPortrait];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
[UIViewController attemptRotationToDeviceOrientation];
还有更多。到目前为止没有任何效果。
谢谢。
答:
0赞
Stéphane Lapointe
5/19/2022
#1
我找到了一个解决方法!!一个奇怪的修复,但仍然如此。我不认为这是好方法,也不是那么强大,但它现在有效。
问题是,您无法为Key:@“orientation”设置设备方向 如果设备已处于该位置(该值不会更改)。所以你的视图不会旋转(我 2 美分的猜测是,当值发生变化时,会有一个触发器)。
要解决此问题,您必须以物理方式旋转设备(用户可能不知道这是他必须执行的操作),或者您可以强制更改 forKey:@“orientation” 的值,以便您可以再次更改它,然后设备将旋转。
在这里:
- (void)viewDidLoad {
[super viewDidLoad];
UIDeviceOrientation currentDeviceOrientation = [[UIDevice currentDevice] orientation];
if(currentDeviceOrientation == UIDeviceOrientationPortrait){
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
}
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
我发现它必须在 viewDidLoad 函数中,否则它将无法正常工作。
简单,丑陋,但高效。
评论