shouldAutorotateToInterfaceOrientation不起作用

时间:2010-05-19 18:07:22

标签: iphone xcode ipad uiviewcontroller screen-orientation

我一直在以纵向模式编写Universal应用程序, 现在经过大约15个nib文件,许多viewCotnrollers, 我想实现shouldAutorotateToInterfaceOrientation并在横向模式下设计一些屏幕。

添加:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 return YES;
} 

到我的所有viewControllers,都不起作用。

在调试期间,我看到调用了这个方法,但它不起作用!不在模拟器中,不在设备中,不在Iphone中,不在Ipad中!

我在论坛中搜索了一些答案,并看到了一些建议:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 return (interfaceOrientation == UIInterfaceOrientationPortrait ||
   interfaceOrientation == UIInterfaceOrientationLandscapeLeft || 
   interfaceOrientation == UIInterfaceOrientationLandscapeRight ||
   interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown );
} 

也没用,

中加入:

 [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

 [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

到我的viewDidLoad和viewDidUnload也分别没用。

我迷路了...任何帮助都可以!

还有一个信息...我的所有视图都是UIControl类型,因为我需要TuchUpInside才能工作。

赞赏你的帮助。

5 个答案:

答案 0 :(得分:44)

确保所有父视图都具有autoresizesSubviews = YES。如果您没有在IB中为所有视图设置弹簧和支柱,则可能需要在代码中执行此操作。

引用Interface Builder用户指南:

  

重要提示:如果你在Cocoa nib文件中   不要设置任何弹簧或支柱   您在Interface Builder中的视图但是   然后使用setAutoresizingMask:   添加自动调整行为的方法   运行时,您的视图可能仍然没有   表现出正确的自动化   行为。原因是界面   Builder禁用自动调整a   如果父母一直看到孩子的话   那些孩子没有泉水   struts设置。启用自动调整大小   再次行为,你必须传递YES   setAutoresizesSubviews:方法   父视图。这样做,   子视图应该正确自动调整。

还有其他一些事项需要注意:

  1. 如果UINavigationController的根视图控制器也设置为自动旋转,则它只会自动旋转。

  2. 如果UITabBarController的所有视图控制器都设置为自动旋转,则它只会自动旋转。

答案 1 :(得分:3)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    UIInterfaceOrientation des=self.interfaceOrientation;

    if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) //iPad
    {
        if(des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown)//ipad-portairait
        {

        }
        else//ipad -landscape
        {

        }
    }
    else//iphone
    {
        UIInterfaceOrientation des=self.interfaceOrientation;

        if(des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown) //iphone portrait
        {

        }
        else //iphone -landscape
        {

        }
    }
return YES;
}

答案 2 :(得分:1)

您要为哪个iOS构建?它在iOS 6.0中已弃用。 (您应该覆盖supportedInterfaceOrientations和preferredInterfaceOrientationForPresentation方法。)

你也可以在UIViewController类上调用shouldAutorotate:

https://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/shouldAutorotate


确保您已在项目设置的“Summery”选项卡中选中了Supported Interface Orientations(在顶部的“Project Navigator”中选择项目名称)。

如果您没有在此处选择要使用的方向,则模拟器/ iphone将不允许屏幕更改方向。

答案 3 :(得分:0)

我有这个问题,但它在iOS6中有效,但在iOS5中无效。结果我在我的故事板中有一个视图,我还没有创建一个viewcontroller类。

答案 4 :(得分:0)

...最后但并非最不重要的是,确保您没有激活测试设备上的“纵向方向锁定”设置(当然不适用于模拟器),这将禁用任何应用中的旋转否无论shouldAutorotateToInterfaceOrientation返回什么。