XCode 4.5/iOS6:我的iPad应用程序在横向模式下的方向问题

Reg*_*_AG 11 xcode ipad ios ios6 xcode4.5

我刚刚在XCode 4.5上打开了我的iPad项目.我的应用程序旨在以横向模式运行.它在以前版本的XCode上完美运行.但是在XCode 4.5上,它旋转了90°(四分之一圈),屏幕右侧有一个空白区域(我的视图大小正确但离开了屏幕).它看起来像这样:

视图(红色)旋转90°并以横向模式进入屏幕

我检查了以下帖子,但没有帮助:

ios6中的方向问题

ios6从横向模式到纵向模式的旋转问题

在xcode 4.5 GM IOS 6中将方向设置为横向模式

有人有这个问题吗?

任何帮助,将不胜感激 !

Reg*_*_AG 6

谢谢大家的回复.我终于找到了解决方案.

首先,检查目标摘要菜单中的所有启动图像是否具有正确的方向和正确的大小(项目的蓝色图标=> target => summary =>在底部滚动); 如果尺寸或方向不正确,则会在启动图像上收到未正确设置的警告.

到目前为止,我有一个具有这种结构的项目(旧的XCode时尚):

  • AppDelegate.h 和.m
  • RootViewController.h 和.m
  • a MainWindow-Iphone.xibMainWindow-iPad.xib(RootViewController在Interface Builder中链接;请参阅下面的截图,其中黄色/棕色图标(内部有一个正方形)相对于RootViewController)

下面是它的外观截图:

我的旧项目结构

以下是我的AppDelegate的applicationDidFinishLaunching:方法中的代码:

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

     [window addSubview:[rootViewController view]];
     [window makeKeyAndVisible];

}
Run Code Online (Sandbox Code Playgroud)

我所做的是更接近使用XCode 4.5创建空项目时获得的结构.所以:

  1. 我删除了MainWindow.xibMainWindow-iPad.xib现在以编程方式创建了我的窗口(更清楚,更好,以确保它适合任何屏幕的大小)
  2. 我删除了我的Info.plist(并设置为MainWindow.xibMainWindow-iPad.xib)中定义的"主nib文件基本名称"和"主nib文件基本名称(iPad)"键.
  3. 我添加了空RootViewController_iPhone.xibRootViewController_iPad.xib
  4. 我改变了我的applicationDidFinishLaunching方法中的代码,如下所示:

    - (void)applicationDidFinishLaunching:(UIApplication *)application {    
    
    NSLog(@"applicationDidFinishLaunching");
    
     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController_iPhone" bundle:nil];
    } else {
        self.rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController_iPad" bundle:nil];
    }
    
    self.window.rootViewController = self.rootViewController;
    
    [self.window makeKeyAndVisible];
    
    Run Code Online (Sandbox Code Playgroud)

    }

现在,一切正常!iPad上的方向是正确的!它比以前更清晰:)我甚至没有必要改变已弃用的方法

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
Run Code Online (Sandbox Code Playgroud)

顺便说一句,为了确保所有视图都是全屏的(在iPhone 5上),请确保在Interface Builder中将视图设置为"缩放以填充"模式,并单击"自动调整子视图".如果您的某些视图没有扩展到全屏,则可能是由于您创建控制器/视图的顺序(superView仅在创建它时(superView)向其子视图发送通知).要轻松解决此问题,只需在以下代码中添加以下代码- (void)viewDidLoad method:

CGRect screenBounds = [[UIScreen mainScreen] bounds];
    [self.view setFrame:CGRectMake(0,0,screenBounds.size.width,screenBounds.size.height)];
Run Code Online (Sandbox Code Playgroud)

或使用:

[self presentModalViewController:myViewController animated:TRUE];
Run Code Online (Sandbox Code Playgroud)

代替:

[self.view.superview addSubview:myViewController.view];
Run Code Online (Sandbox Code Playgroud)

presentModalViewController 确实会向子视图发送调整大小通知.

希望这会有所帮助!

  • 谢谢!刚添加`self.window.rootViewController = rootViewController;`并且工作正常! (2认同)