在我的通用应用程序中,我需要处理iphone和ipad的不同方向。对于ipad,我需要允许横向和iphone肖像。我在第一时间返回了以下代码
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
return UIInterfaceOrientationIsPortrait(interfaceOrientation);
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
在IOS 5中工作正常但在IOS 6中,autorotate方法根本没有被解雇。之后我将方法改为,
-(BOOL)shouldAutorotate
{
return NO;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationMaskPortrait;
}
即使这种方法在IOS 6中也没有被解雇。
我的plist设置是
我需要同时处理IOS 5和IOS 6的方向[iPhone-portrait,iPad-landscape]。请指导我解决此问题。
答案 0 :(得分:3)
你的rootviewcontroller是UINavigation控制器还是UITabbarcontroller? 如果是这样,如果您在视图控制器中调用这些方法,这些方法将无法工作。
因此,在这些容器视图控制器上创建一个目标C类别,并添加到您的项目中。
@implementation UINavigationController (autorotate)
-(NSUInteger)supportedInterfaceOrientations
{
//make the check for iphone/ipad here
if(IPHONE)
{
return UIInterfaceOrientationMaskPortrait;
}
else
{
return UIInterfaceOrientationMaskLandscape;
}
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationPortrait;
}
- (BOOL)shouldAutorotate
{
return NO;
}
答案 1 :(得分:2)
将此方法添加到您的应用委托其100%正常工作
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window // iOS 6 autorotation fix
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
return UIInterfaceOrientationPortraitUpsideDown;
}
else
return UIInterfaceOrientationMaskAll;
}
答案 2 :(得分:0)
您想要的是以下内容:
#pragma mark - iOS 5.1 and under Rotation Methods
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation; {
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}
else{
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
}
#pragma mark - iOS 6.0 and up Rotation Methods
- (BOOL)shouldAutorotate; {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations; {
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown);
}
else{
return UIInterfaceOrientationMaskLandscape;
}
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation; {
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
return UIInterfaceOrientationPortrait;
}
else{
return UIInterfaceOrientationLandscapeLeft;
}
}
您必须确保 2倍 。
首先,这是在RootViewController
中实现的。如果您将UIViewController
嵌入UINavigationController
(或UITabBarController
),则必须自定义UINavigationController
(或自定义UITabBarController
)实现这些方法并使用它的类。
第二次,您必须确保Info.plist
文件中支持方向。否则,系统将覆盖这些方法的返回值(注意:,您也可以通过单击目标摘要页面中的按钮轻松更改这些值。)
希望有帮助!
答案 3 :(得分:0)
这是Pradeep答案的快速版本。您不需要将所有导航控制器子类化以获得您想要的工作(也就是说,仅关闭iPhone的横向方向)
只需将此添加到您的应用代理:
func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int {
if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
return Int(UIInterfaceOrientationMask.Portrait.rawValue)
} else {
return Int(UIInterfaceOrientationMask.All.rawValue)
}
}