1

我有一个适用于 iPhone 和 iPad 的通用应用程序,带有单独的 xib

对于 iPad 版本,我希望我的 iPad xib 之一处于横向模式。我已在模拟指标中将其设置为横向(该应用程序在摘要屏幕中设置为纵向),并且横向视图在运行时仍以纵向显示。我确定我在这里阅读了一个命名约定,它告诉应用程序 xib 是横向的,即:view1_one.xib~ipad-landscape

我尝试过使用屏幕旋转方法,但 iOS 6 屏幕旋转只是证明如此令人沮丧,因为我尝试了很多解决方案,但都没有效果。我之前在 iOS 6 中完成过屏幕旋转,但我使用故事板并为我选择的视图子类化导航控制器,我不知道如何使用此代码执行此操作,因为我从其他人那里选择了 ip

总结一下:我怎样才能让我的屏幕尊重我在界面生成器中创建的横向 xib 而不是纵向显示它

我会指出我已经在这里搜索了一个解决方案,并在发布此之前花了很多时间

4

1 回答 1

3

资源(包括 xib)有一些命名约定,用于指定加载它们的设备类型。然而,这些并不存在于特定的方向。-landscape不会做任何额外的事情(更具体地说,它可能也会在 iPhone 上加载资源,这不是您想要的)。

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/LoadingResources/Introduction/Introduction.html#//apple_ref/doc/uid/10000051i-CH1-SW2

至于处理方向变化,请确保您同时实现了 iOS 5 及以下的方法以及处理它们的 iOS 6 方法:

// Older versions of iOS (deprecated)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
}

// iOS6
- (BOOL)shouldAutorotate {
    return YES;
}

// iOS6
- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

// Added after comment
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationLandscapeLeft;
}

这是确保您的 viewController 仅在横向加载的官方方法。

编辑:

我也添加了preferredInterfaceOrientationForPresentation方法。虽然我个人不喜欢这种方法,但它会强制 viewController 以该方向呈现,直到下一次方向改变。不好,但它会帮助您查看您的定向方法是否被调用。

还要尝试在这些方法中的每一个中设置断点。如果他们根本没有被调用,您的问题可能与子类化有关。确保情节提要中的 viewController 设置为子类而不是超类。

编辑2:

在 Interface Builder 中检查:

确保 Interface Builder 中的 ViewController 设置为适当的子类

于 2012-12-10T13:43:29.637 回答