UIActionSheet обрезается своим супервидом, у меня нет панели инструментов или табуляции

В моем приложении используется 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:].

Однако у меня нет панели инструментов, и у меня нет панели.

Я пробовал несколько других ответов на переполнение стека, ни одна из которых не работает для меня:

Проблема с UIActionSheet

Я попытался представить его из self.navigationController.view, из self.parentViewController.view, из CGRect, который я создал, который был внизу представления, из self.view.bounds, потому что я был в отчаянии.. ни один из он работает для меня.

Он работает в iOS 6, но не работает в iOS 7. Вот несколько скриншотов из него, работающих на iOS 6 и сбой на iOS 7.

enter image description here

enter image description here

Любая помощь?

ОБНОВЛЕНИЕ 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>>

Ответ 1

У меня было то, что казалось совершенно не связанной проблемой в том же приложении, в котором некоторые из кнопок в левой части экрана не были недоступны.

Невозможно нажать кнопки с левой стороны от 4 " iPhone

При исследовании, что я обнаружил, что мой UIWindow был 320x480. Проблема была в моем MainWindow.xib. Xcode создал этот xib для меня, но это был, вероятно, Xcode 3, и это было несколько лет назад. Я решил просмотреть настройки, и я заметил вариант "Полный экран при запуске". Я просмотрел эту опцию в документах, и была заметка о том, что это всегда должно быть включено, чтобы Окно было соответствующим образом изменено в соответствии с размером устройства. Это никогда не было проблемой, когда был только один iPhone размера, но это стало проблемой с введением 4-дюймового iPhone.

Итак, я проверил эту коробку, перезапустил и альта, и эта, и другая проблема были решены, потому что закрывающий UIWindow был правильно определен.

Ответ 2

Недавно я решил аналогичную проблему, происходящую на iOS 7 (хотя она не включала в себя лист действий), представляя в главном окне; в вашем случае это будет что-то вроде:

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

надеюсь, что он будет работать и в вашем случае.

Ответ 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);

Ссылка: Проблема с UIActionSheet Форма: user352537