Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 覆盖第三方ViewController的自动旋转属性_Ios_Objective C - Fatal编程技术网

Ios 覆盖第三方ViewController的自动旋转属性

Ios 覆盖第三方ViewController的自动旋转属性,ios,objective-c,Ios,Objective C,我正在开发一个应用程序,它利用第三方库来展示自己的视图控制器。我所能得到的只是一个.a库和一个头文件。我的应用程序仅在纵向模式下运行,但当我将手机置于横向模式并从库中显示视图控制器时,应用程序会崩溃,并出现一个错误,说明: “没有支持的方向与应用程序的方向匹配。” 我猜他们已经编写了以下代码: - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { //

我正在开发一个应用程序,它利用第三方库来展示自己的视图控制器。我所能得到的只是一个.a库和一个头文件。我的应用程序仅在纵向模式下运行,但当我将手机置于横向模式并从库中显示视图控制器时,应用程序会崩溃,并出现一个错误,说明:

“没有支持的方向与应用程序的方向匹配。”

我猜他们已经编写了以下代码:

- (BOOL)shouldAutorotate { 
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {

    // ATTENTION! Only return orientation MASK values
    // return UIInterfaceOrientationPortrait;

    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeLeft;
} 
如果是这样的话,我可能需要重写这些方法来告诉操作系统不要旋转,并且只支持纵向我该怎么做呢?


我能想到的唯一可能性是快速切换视图控制器的方法,但根据一些SO帖子的说法,这似乎是一种危险的方法。

我想说,继续,快速切换它。升级库以测试此特定项时,需要小心。swizzling的危险通常伴随着swizzling Apple的API而来,因为它们可能会被弃用,或者在任何版本中改变它们的行为(这可能会破坏你的应用程序以供用户使用)

始终可以执行以下操作(例如在纵向模式下锁定ViewController):

1) 在应用程序代理头文件上设置属性<代码>@仅限属性(非原子)布尔锁

2) 在应用程序委托实现文件中添加以下方法:

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindows:(UIWindow *)window
{
    if (!self.lockScreenPortraitOnly)
        return UIInterfaceOrientationMaskAll;   // or, whatever you wish to support
    else
        return UIInterfaceOrientationMaskPortrait;
}
3) 从ViewController中添加以下内容:

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    ((EliotsApplicationDelegateType *)[UIApplication sharedApplication].delegate).lockScreenPortraitOnly = YES;
}

-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    ((EliotsApplicationDelegateType *)[UIApplication sharedApplication].delegate).lockScreenPortraitOnly = NO;
}
现在,Plist中有什么或第三方库在做什么并不重要,因为“窗口”是最根的,因此,它控制层次结构中的所有其他内容。显然,在我的示例中,假设在第三方库代码启动之前调用了VC(根据需要调整、季节和烘焙)

希望这对您有所帮助。

可能的副本