UIActionSheet存在问题

36
当我运行我的应用程序并点击按钮,操作表会出现这个问题:

呈现的操作表被其父视图剪裁。某些控件可能无法响应触摸。在 iPhone 上,尝试使用-[UIActionSheet showFromTabBar:]或-[UIActionSheet showFromToolbar:]而不是-[UIActionSheet showInView:]。

如何解决?
10个回答

61

试试这个,对我来说完美地解决了:

[actionSheet showInView:[UIApplication sharedApplication].keyWindow];

非常完美:))正是我在寻找的!! - filou
@VSN,如果您在横屏模式下打开操作表格,则会出现问题。 操作表格将从侧面进入屏幕,并旋转90度。 您有解决方案吗? 否则它真的很有帮助。 TIA。 - katzenhut
非常相似但代码更少且更易记,你可以这样做: [actionSheet showInView:self.view.window] - Erwan

28
您可以尝试使用[MyActionSheet showInView:super.view];,如果您有UITabBar或UIToolbar,则可以使用[MyActionSheet showFromTabBar:self.tabBarController.tabBar];[MyActionSheet showFromToolBar:self.toolbar];。请保留HTML标记。

12

如果您正在使用UINavigationViewController,则应该将其解决为使用[actionSheet showInView:self.parentViewController.view];而不是self.view,因为该控制器默认具有顶部导航栏。


或者 self.navigationController.view - LolaRun

5
    [sheet showInView:[UIApplication sharedApplication].keyWindow];
    sheet.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height-sheet.frame.size.height, [UIScreen mainScreen].bounds.size.width, sheet.frame.size.height);

这应该解决问题。


谢谢,这个是唯一一个对我有用的(稍微添加了一些内容,以便在有或没有导航控制器的情况下都能工作)。我曾经遇到过类似的问题,即在自定义iOS6 + iOS7窗口配置时,当你将窗口向下移动20个点并保持所有内容不变时,会出现问题。 - MANIAK_dobrii

1

我通过以下方式解决了我的几乎相同的问题:

YourAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[actionSheet showFromTabBar:delegate.tabBarController.tabBar];

假设您使用TabBarController xCode模板作为起点。

0
另一个类似的解决方案,对于我来说在UIPageViewController -> UINavigationViewController -> TableViewController结构中有效的是:
[actionSheet showInView:self.view.superview];

0
使用这个:
[actionSheet showInView:self.view.window];

这将强制操作表显示在导航栏上方并响应所有点击。但请注意,如果您使用一些左/右滑动菜单库,可能会导致操作表呈现在屏幕外。只需测试一下...


0

我尝试了以上所有答案,但都没有用。最终,我发现唯一的解决方案是减少操作表上的项目数量,因为它已经溢出了。


0

记住,您的工具栏可能是导航控制器的一部分。您可以通过self.navigationController.toolbar访问它。


0
这是 Swift 版本:
actionSheet.showInView(UIApplication.sharedApplication().keyWindow)

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