UIActionSheet在横屏模式下显示不正常

3

我正在尝试在我的应用程序中显示一个UIActionsheet。在竖屏模式下,它可以完美地工作。但是当我尝试在横屏模式下显示时,它仍然从底部滑入。然而,它不再使用按钮,并像处于横屏模式下一样显示选择器控件。只是位置不对。

我不使用自动旋转,在竖屏模式下保持一切。偶尔我会以横屏模式显示一些内容,并希望操作表能正确显示。

我这样设置状态栏方向...

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

当我处于横向模式时,状态栏始终正确显示。如果我显示一个AlertView,它也可以正确显示。然后我像这样显示actionsheet:

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];

我还尝试过从app delegate和工具栏中显示它。如果我在显示之前设置状态栏方向,它仍然不起作用。我甚至已经尝试了。
[[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); - mahboudz
只是好奇:为什么你要写成(-1)*M_PI来表示负数,而不是直接写成-M_PI呢? - Duck
@mahboudz:老实说,我现在不记得了,可能是打错字了。 - katbyte
@RubberDuck:哦,我不知道你可以这样做!谢谢你指出来 :) - katbyte
2个回答

13

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

[actionSheet showInView:[self.view]];

这个修改修正了问题:

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

看起来ActionSheet的方向是根据传递给ShowInView的视图确定的,即使我的当前视图是横向的,但我的根视图仍然是竖向的。至少,这是我的理论。


2

整体的“界面方向”也包括当前视图变换、UIViewController认为的当前方向以及可能的其他内容;仅设置状态栏方向并不总是足够的。

self.view是否处于纵向方向?


非常感谢您指引我正确的方向,我曾尝试从横向工具栏中显示它,但并没有成功。然而,似乎将横向视图添加到应用程序窗口以显示它可以完美解决问题! - katbyte
准备好了吗?它可能会以奇怪和神秘的方式崩溃! - tc.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接