2017-04-24 91 views
1

我正在开发一个应用程序,该应用程序在启动时处于纵向模式。之后,我为我的项目添加了一些SDK。在集成SDK的过程中,需要在“常规”窗格中选中“纵向”和“横向”权限。所以我将其设置为在SDK集成手册中给出的。如何停止设备方向更改

enter image description here

后,当我跑我的设备项目,将其旋转到右边的应用设备的方向正在发生变化。我怎样才能设置方向是固定的,而不会干扰SDK。

+0

可以清除问题正是你想要什么如果你设置的风景正确,然后定位 - 当然它会改变。 –

+0

我想我的应用程序将只支持肖像模式。我知道,如果我给风景权,它会改变方向。如果我删除风景权,我的sdk无法正常工作,并且像'支持的方向与应用程序没有共同的方向,并且应该手动标记返回YES'一样出现一些错误。 – Ramakrishna

+0

看看这个答案:http://stackoverflow.com/a/43359827/7715250 –

回答

2

如果您遇到问题设置方位的应用程序启动之后,那么你可能需要停止向每个视图控制器或它的一个基地导航控制器

斯威夫特3:

class YourBaseNavigationController: UINavigationController { 
override func viewDidLoad() { 
    super.viewDidLoad() 
    UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation") 
} 
override var shouldAutorotate: Bool { 
    return false 
} 
override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
    return .portrait 
} 
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation { 
    return .portrait 
}} 

使用YourBaseNavigationController作为您的导航控制器。基本上,此导航控制器中的所有视图控制器都将强制仅支持纵向模式。

+0

我会试试这个解决方案。 – Ramakrishna

+0

如果我以编程方式将我的根视图控制器设置为导航控制器,该怎么办? 'nav = UINavigationController(rootViewController:SyncVc)' – Ramakrishna

+0

因此,不要在这里使用UINavigationController,而应该使用YourBaseNavigationController。 'YourBaseNavigationController(rootViewController:SyncVc)' – RMRAHUL

0

您需要通过代码禁用方向。

在RootViewController的添加以下代码:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
// Return YES for supported orientations 
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);//set 'return NO'; for stop orientation 
} 

斯威夫特

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
    return UIInterfaceOrientationMask.Portrait 
} 
+0

好的。我会尝试。 – Ramakrishna

2

取消标记景观留下的检查和景观右

+0

我知道,如果我取消选中左侧风景和右侧风景,它将以纵向模式工作。但是,如果我取消选中我的SDK有问题的选项。 – Ramakrishna