我有一个iPad应用程序正常工作,除了在发布期间的奇怪问题。我读了几个问题&关于方向的答案,但这仍然让我难过。
根视图控制器是一个带有3个选项卡的UITabBarController。其中两个选项卡具有自定义视图控制器(一个基于UIViewController,另一个基于UITableViewController),并且都受此启动方向问题的影响。第三个选项卡是一个嵌入在UINavigationController中的自定义UITableViewController。
好的,这是问题所在。如果我以纵向方向启动应用程序,一切都很好。如果我以横向方向启动它,第3个选项卡可以正常工作。但是,前两个选项卡以纵向方向显示,即使:
如果我在视图控制器的viewWillAppear中调用[self interfaceOrientation]或[[UIApplication sharedApplication] statusBarOrientation],则第3个选项卡的视图控制器报告3(横向),但前两个视图控制器报告1(纵向),即使状态酒吧显然是风景!
如果我将iPad旋转为纵向并返回横向,则所有3个标签的视图都会正确旋转(上述方法会按预期返回3)。
此外,如果我点击任何其他标签然后返回标签#1或#2,那么即使没有旋转iPad本身,它们也会正确旋转!
我错过了什么?
答案 0 :(得分:3)
您必须将supportedDeviceOrientations添加到“myApp.plist”。
单击此列表,添加“支持的界面方向”键并添加支持的界面方向。这解决了我的问题。
有关详细信息,请点击此链接,转到“应用程序包”部分:http://developer.apple.com/iphone/library/documentation/General/Conceptual/iPadProgrammingGuide/CoreApplication/CoreApplication.html
答案 1 :(得分:1)
我终于找到了答案:我在装载控制器中忘了这个。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
答案 2 :(得分:1)
我发现设备方向一无所获。并且应该为Unknown返回YES。这样可以使设备以正确的启动方向定位。
以下是我用来将此消息提升到旧邮件的代码。
- (BOOL)shouldAutorotate{
UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
if (orientation == UIDeviceOrientationUnknown) return YES;
BOOL result = [self shouldAutorotateToInterfaceOrientation:orientation];
return result;
}
注意如果orientation == UIDeviceOrientationUnknown,则返回YES。这纠正了我的装载问题。
答案 3 :(得分:0)
试试这个
- (BOOL)shouldAutorotateToInterfaceOrientation: UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation==UIInterfaceOrientationPortraitUpsideDown);<br>
}
答案 4 :(得分:0)
解决方案是添加密钥
UISupportedInterfaceOrientation
带有一个字符串数组的Info.plist,指定启动时支持的接口方向,这些是
UIInterfaceOrientationPortrait
UIInterfaceOrientationPortraitUpsideDown
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
然而,有一个可能导致混淆的后续问题:至少使用来自XCode 3.2.4的SDK 3.2和iPad模拟器我发现(至少一些)Info.plist设置似乎安装应用程序时缓存和/或不更新。也就是说,添加上面的密钥并在模拟器中安装和启动应用程序无效。但是,从模拟器中删除应用程序可以解决问题,新安装的应用程序的行为符合指定。
答案 5 :(得分:0)
在app delegate的applicationDidFinishLaunchingWithOptions:方法中,将视图控制器的视图添加到窗口后,添加以下内容:
[myViewController viewDidLoad];
如有必要,这将触发对shouldAutorotateToInterfaceOrientation:方法的调用。