上次我运行了我制作的iOS应用程序,它必须已经用于部署目标5.0和相关的SDK(它有可能早在4.3)。部署现在是6.1。我的应用程序只运行景观,在景观中工作得很好。但是在我更新了我的iPad和iOS SDK并在大约一年内第一次运行这个应用程序后,似乎已经发生了变化。
按钮显示为iPad处于纵向模式。这是错误的,因为它应该是横向的(它曾经工作得很好)。
最新更新有哪些变化?
我在Xcode中支持的界面方向仅选择了“横向右侧”,在“信息”部分中,我只有一个项目“支持的界面方向”:“横向(右侧主页按钮)”。
在应用程序首次打开时打开的主视图控件中,我有
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight ||
interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
以及viewDidLoad
的第一行是
self.view.frame = CGRectMake(0, 0, 1024, 768);
那么为什么代码绘制按钮好像处于纵向模式?
更新
我尝试用
替换shouldAutorotateToInterfaceOrientation
方法
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationLandscapeRight & UIInterfaceOrientationLandscapeLeft;
}
但它仍然不起作用。
答案 0 :(得分:0)
shouldAutorotateToInterfaceOrientation
,您应该覆盖
supportedInterfaceOrientations
UIViewController
方法
引用了doc:
在iOS 6中,您的应用支持在您的应用中定义的界面方向 app的Info.plist文件。视图控制器可以覆盖 supportedInterfaceOrientations方法限制支持的列表 取向。通常,系统仅在根上调用此方法 视图控制器的窗口或视图控制器呈现填充 整个屏幕;子视图控制器使用的部分 由父视图控制器为它们提供的窗口不再 直接参与有关轮换的决定 支持的。应用程序的方向掩码和视图的交集 控制器的方向掩码用于确定哪些方向 视图控制器可以旋转到。
您可以覆盖preferredInterfaceOrientationForPresentation 一个视图控制器,旨在全屏显示 具体方向。
答案 1 :(得分:0)
iOS6.0中的方向更改
您应该实施以下方法
-(BOOL)shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}
// Set the initial preferred orientation
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationLandscapeRight;
}
注意强>
如果您正在使用TabBarController/NavigationController
,则应该对这些视图控制器进行子类化以覆盖方向方法,以便它应该调用您自己的视图控制器方法。这是iOS6的重大变化。
#import "UINavigationController+Orientation.h"
@implementation UINavigationController (Orientation)
-(NSUInteger)supportedInterfaceOrientations
{
return [self.topViewController supportedInterfaceOrientations];
}
-(BOOL)shouldAutorotate
{
return YES;
}
@end