MFMailComposeViewController 操作表在 iOS5 上 setStatusBarHidden:YES 时不在屏幕上

Posted

技术标签:

【中文标题】MFMailComposeViewController 操作表在 iOS5 上 setStatusBarHidden:YES 时不在屏幕上【英文标题】:MFMailComposeViewController action sheet is off-screen when setStatusBarHidden:YES on iOS5 【发布时间】:2012-05-14 16:57:34 【问题描述】:

我遇到了 MFMailComposeViewController 的取消按钮的问题。这是我的上下文

- (void)viewDidLoad

    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
   [[UIApplication sharedApplication] setStatusBarHidden:YES];


- (IBAction)showButtonDidTouch:(id)sender 
    if ([MFMailComposeViewController canSendMail]) 
         MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
         mailViewController.mailComposeDelegate = self;
         mailViewController.modalPresentationStyle = UIModalPresentationFormSheet;
         [self presentModalViewController:mailViewController animated:YES];
         [mailViewController release];


我在 viewDidLoad 隐藏了状态栏,然后将显示的 mailViewController 称为当前模式视图控制器。但是,问题是当应用程序处于横向模式和 uikeyboard 出现时,当点击取消按钮作为图像时,操作表不会显示:http://img651.imageshack.us/img651/5489/screenshot20120514at114.png

左上角的红色小图是操作表。如果我设置 statusbarhidden = NO,它就会显示出来。

感谢您的帮助,谢谢

【问题讨论】:

Soo.... 有什么问题?您希望操作表在哪里? 啊,问题是操作表不在屏幕上,您无法点击它。我希望它正常显示,这意味着在取消按钮的正上方或下方。它只发生在 ios5 上 :( 【参考方案1】:

我可以通过注册 UIKeyboardWillShowNotification 来解决这个问题(我认为这是一个 iOS 错误)。每当显示键盘时,我手动将 MFMailComposeViewController 的超级视图的框架设置为 +/- 20(状态栏高度),具体取决于方向(横向或横向)。这是一个非常丑陋的 hack,但它现在对我有用。

【讨论】:

感谢您的解决方法。由于这个问题,我没有隐藏状态栏,但现在我必须隐藏它。而你的拯救了我的一天【参考方案2】:

我用了一个计时器,移动

[self presentViewController:mc animated:YES completion:^(void) ];

到操作表之外,它也可以工作。

【讨论】:

以上是关于MFMailComposeViewController 操作表在 iOS5 上 setStatusBarHidden:YES 时不在屏幕上的主要内容,如果未能解决你的问题,请参考以下文章