资源(包括 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 中检查: