【问题标题】:UIActionSheet is clipped by its superview, I don't have a toolbar or tabbarUIActionSheet 被它的 superview 裁剪,我没有工具栏或标签栏
【发布时间】:2013-09-25 03:19:30
【问题描述】:

我的应用使用 UINavigationController,但我没有显示工具栏,因为我的所有导航都由游戏内控件控制。

我没有标签栏,因为我没有使用 TabBarController。

我的游戏应用仅限横向。

这就是我之前创建和呈现 UIActionSheet 的方式:

UIActionSheet *quitGameSheet = [[UIActionSheet alloc] 
     initWithTitle:@"Quit your game?" 
     delegate:self
     cancelButtonTitle:@"Cancel"
     destructiveButtonTitle:@"Yes, quit game"
     otherButtonTitles:nil];
[quitGameSheet showInView:self.view];

但是,UIActionSheet 大多不在屏幕上,我收到此错误:

Presenting action sheet clipped by its superview. Some controls might not respond to touches. On iPhone try -[UIActionSheet showFromTabBar:] or -[UIActionSheet showFromToolbar:] instead of -[UIActionSheet showInView:].

但是,我没有工具栏,也没有标签栏。

我已经尝试了其他几个 Stack Overflow 答案,但没有一个对我有用:

Issue with UIActionSheet

我尝试从 self.navigationController.view、self.parentViewController.view、我创建的位于视图底部的 CGRect、self.view.bounds 中呈现它,因为我很绝望……没有它对我有用。

它适用于 iOS 6,但不适用于 iOS 7。以下是它在 iOS 6 上运行但在 iOS 7 上失败的几个屏幕截图。

有什么帮助吗?

更新 1 ---

这是根据要求的视图层次结构:

<UIView: 0xc480380; frame = (0 0; 568 320); autoresize = RM+BM; layer = <CALayer: 0xc4803e0>>
   | <UIImageView: 0xc480410; frame = (0 0; 568 320); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0xc4804a0>>
   | <UIButton: 0xc47b370; frame = (203 107; 159 37); opaque = NO; autoresize = LM+RM+BM; layer = <CALayer: 0xc47a730>>
   |    | <UIImageView: 0xc475150; frame = (0 0; 159 37); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xc4751e0>>
   | <UIButton: 0xc478a00; frame = (203 152; 159 37); opaque = NO; autoresize = LM+RM+BM; layer = <CALayer: 0xc477dd0>>
   |    | <UIImageView: 0xc475030; frame = (0 0; 159 37); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xc4750c0>>
   | <UISwitch: 0xc47dcc0; frame = (313 65; 51 31); opaque = NO; autoresize = LM+RM+BM; layer = <CALayer: 0xc47d180>>
   |    | <_UISwitchInternalViewNeueStyle1: 0xc47e040; frame = (0 0; 51 31); gestureRecognizers = <NSArray: 0xc47ffa0>; layer = <CALayer: 0xc47e140>>
   |    |    | <UIView: 0xc47e4e0; frame = (35.5 0; 15.5 31); clipsToBounds = YES; layer = <CALayer: 0xc47e540>>
   |    |    |    | <UIView: 0xc47e330; frame = (-35.5 0; 51 31); layer = <CALayer: 0xc47e390>>
   |    |    | <UIView: 0xc47e450; frame = (0 0; 35.5 31); clipsToBounds = YES; layer = <CALayer: 0xc47e4b0>>
   |    |    |    | <UIView: 0xc47e3c0; frame = (0 0; 51 31); layer = <CALayer: 0xc47e420>>
   |    |    | <UIView: 0xc47f750; frame = (0 0; 51 31); layer = <CALayer: 0xc47f7b0>>
   |    |    |    | <UIImageView: 0xc47f480; frame = (39 16; 0 0); alpha = 0; userInteractionEnabled = NO; layer = <CALayer: 0xc47f660>>
   |    |    |    | <UIImageView: 0xc47f690; frame = (12 16; 0 0); userInteractionEnabled = NO; layer = <CALayer: 0xc47f720>>
   |    |    | <UIImageView: 0xc47e680; frame = (7 -6; 57 43.5); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xc47f2f0>>
   | <UILabel: 0xc480610; frame = (173 63; 96 29); text = 'Sounds:'; clipsToBounds = YES; opaque = NO; autoresize = LM+RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xc480540>>
   | <UIButton: 0xc473a20; frame = (203 197; 159 37); opaque = NO; autoresize = LM+RM+BM; layer = <CALayer: 0xc473590>>
   |    | <UIImageView: 0xc474f30; frame = (0 0; 159 37); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xc474fc0>>

【问题讨论】:

  • 嗨,将 opeque 设置为 NO 并添加 navigation.view 而不是 self.view...
  • 设置什么不透明=NO?
  • 你建议我将什么项目设置为不透明?
  • 我想设置 Action sheet 像:actionsheet.opaque = NO;
  • 您能附上您的视图层次结构的描述吗?使用 (gdb) po [[self view] recursiveDescription]

标签: ios ios7 uiactionsheet


【解决方案1】:

我在同一个应用程序中遇到了一个似乎完全不相关的问题,其中屏幕左侧的一些按钮无法点击。

Can't tap buttons on the left side of 4" iPhone

在调查时我发现我的 UIWindow 是 320x480。问题出在我的 MainWindow.xib 中。 Xcode 为我创建了这个 xib,但它可能是 Xcode 3,而且是几年前的事了。我决定查看设置,并注意到“启动时全屏”选项。我在文档中查找了该选项,并且有一条说明指出这应该始终打开,以便正确调整窗口大小以匹配设备大小。当只有一个尺寸的 iPhone 时,这从来不是问题,但随着 4 英寸 iPhone 的推出,它就成了问题。

所以,我选中了那个框,然后重新启动和 viola,这个问题和另一个问题都解决了,因为封闭的 UIWindow 大小正确。

【讨论】:

    【解决方案2】:

    我最近通过在主窗口中显示解决了 iOS 7 上发生的类似问题(尽管它不涉及操作表);在你的情况下,它会是这样的:

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

    希望它也适用于您的情况。

    【讨论】:

    • 我也试过了,但没有成功,因为 .keyWindow 的大小不正确。解决方案是确保 UIWindow 被正确调整大小,如上所述。
    【解决方案3】:
    [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);
    

    链接:Issue with UIActionSheet 表格:user352537

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多