我的通用应用程序有以下代码,但是当我运行应用程序时,我得到了这个奇怪的日志。然而,一切似乎都很好。
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (NSClassFromString(@"UISplitViewController") != nil && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
return YES;
}
else
return NO;
}
在控制台中:
The view controller <UINavigationController: 0x1468d0> returned NO from -shouldAutorotateToInterfaceOrientation: for all interface orientations. It should support at least one orientation.
答案 0 :(得分:2)
消息说明了一切:
它应该支持至少一个方向。
在else
语句中,NO
的返回与方向无关。如果此处NO
表示“仅限肖像”,请进行检查并返回YES
作为肖像:
else
return
(interfaceOrientation == UIInterfaceOrientationPortrait) ?
YES :
NO ;
或者更简洁(但不那么擅长)的版本:
else
return (interfaceOrientation == UIInterfaceOrientationPortrait);
答案 1 :(得分:0)
我认为这意味着你的if条件总是错误的。无论是iPad还是UISplitViewController类,都应始终为纵向或横向返回YES。例如,你的iPhone总是会返回NO。从更像这样的事情开始,然后也许只有blahblah允许景观:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (NSClassFromString(@"UISplitViewController") != nil && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
return YES;
}
else
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait) || (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}
答案 2 :(得分:0)
我认为你的if
条件总是失败,所以你可能总是返回NO
,这意味着“我不支持任何方向”,这显然不是真的......什么是你想支持的最低目标?
如果您的else
应该处理iPhone / iPod,则应至少在一个方向上返回YES
:
return (interfaceOrientation == UIInterfaceOrientationPortrait);
或者
return inOrientation == UIDeviceOrientationLandscapeLeft
|| inOrientation == UIDeviceOrientationLandscapeRight
|| inOrientation == UIDeviceOrientationPortrait
|| inOrientation == UIDeviceOrientationPortraitUpsideDown;
如果您打算支持所有方向。
如果您关心支持低于3.2的iOS版本并希望在模拟器上进行测试,您可能需要更改“iPad检查”,就像这样。
- (BOOL)amIAnIPad {
// This "trick" allows compiling for iOS < 3.2 and testing on pre 3.2 simulators
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 30200)
if ([[UIDevice currentDevice] respondsToSelector: @selector(userInterfaceIdiom)])
return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad);
#endif
return NO;
}
有关此技巧的更多信息,请访问Jeff LaMarche's blog。