UIActionSheet 在横向模式下无法正确显示

Posted

技术标签:

【中文标题】UIActionSheet 在横向模式下无法正确显示【英文标题】:UIActionSheet won't display properly in landscape mode 【发布时间】:2010-09-12 00:58:01 【问题描述】:

我正在尝试在我的应用程序中显示 UIActionsheet。它在纵向模式下完美运行,但是当我尝试让它以横向显示时,它仍然从底部滑入。但是,它不再像在横向模式下那样使用带有选择器控件的按钮和显示。它只是在错误的位置。

我不使用自动旋转并将所有内容保持在纵向模式。有时我会以横向模式显示内容,并希望操作表正确显示。

我正在设置状态栏方向...

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO];

当我处于“横向模式”时,状态栏总是正确显示。如果我显示 AlertView 它也会正确显示。然后我像这样显示操作表

UIActionSheet *as = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel Button" destructiveButtonTitle:nil otherButtonTitles: @"button", nil];    
as.actionSheetStyle = UIActionSheetStyleBlackOpaque;
[as showInView:self.view];
//[as showFromToolbar:toolbar];

我还尝试从应用程序委托和工具栏显示它。如果我在显示之前设置状态栏方向仍然不起作用。我什至尝试过。

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeLeft];

有没有人知道为什么操作表可能显示在错误的位置但使用正确的控件?或者如何强制操作表显示在特定位置。我宁愿不必实现我自己的操作表版本来让它正确显示。

提前致谢。

编辑/解决方案:强制操作表以横向模式显示

这是我设法让它工作的方法,我创建了一个横向视图并将其添加到我的主窗口中,如下所示:

landscapeView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 480, 480)];
landscapeView.transform = CGAffineTransformMakeRotation((-1)*M_PI/2);
landscapeView.bounds = CGRectMake(0, 0, 480, 380);
[appDelegate.window addSubview:landscapeView];

然后像这样显示我的操作表

if (landscape) 
    [menu showInView:landscapeView];
 else 
    [menu showInView:self.view];

非常感谢 tc。在这里为我指明了正确的方向。

【问题讨论】:

为什么用380而不是320? CGRectMake(0, 0, 480, 380); 只是好奇:当你可以简单地把它写成 -M_PI 时,为什么你把它写成 (-1)*M_PI 来让它变成负数? @mahboudz:我现在不记得了,可能是错字。 @RubberDuck:我只是不知道你能做到这一点!感谢您指出:) 【参考方案1】:

我遇到了类似的问题。我的工具栏中有一个显示操作表的按钮。显示操作表的代码在我的 rootViewController 中。使用此代码在横向模式下显示不正确:

[actionSheet showInView:[self.view]];

此更改纠正了问题:

[actionSheet showInView:[self.navigationController view] ];

看起来 ActionSheet 从传递给 ShowInView 的视图中获取了它的方向,并且我的 rootViewController 处于纵向模式,即使我当前的视图是横向的。至少,这是我的理论。

【讨论】:

【参考方案2】:

整体的“界面方向”还包括诸如当前视图变换、UIViewController 认为的当前方向之类的东西,可能还有其他东西;仅设置状态栏方向并不总是足够的。

self.view 是纵向的吗?

【讨论】:

非常感谢您为我指明了正确的方向,但事实并非如此,我曾尝试从面向横向的工具栏中显示它,但没有奏效。但是,似乎向应用程序窗口添加横向视图以显示它就可以了! Ewwwwwww ;) 准备好让它以奇怪而神秘的方式闯入!

以上是关于UIActionSheet 在横向模式下无法正确显示的主要内容,如果未能解决你的问题,请参考以下文章

在横向模式下,字段集无法正确显示在 ipad 上

JTRevealSideBar UI 在 iPhone 和 iPad 的横向模式下无法正确显示

弹出窗口中的 UIActionSheet 布局错误

Monotouch - UIActionSheet 无法在 iPad 上正确显示

带有许多按钮的 Xcode iPad UIActionSheet 无法正确显示 iOS7

iPhone 横向模式返回不正确的视图大小