2

我的 iPhone 应用程序支持上下颠倒的界面方向:当用户将手机上下颠倒(以便主页按钮在顶部)时,整个用户界面垂直翻转。

但是,当尝试从我的视图控制器A呈现一些视图控制器B时会出现问题(在此示例中,我呈现标准邮件编写器视图控制器):

- (IBAction)buttonTapped:(id)sender {

    MFMailComposeViewController *mailVC = [MFMailComposeViewController new];
    mailVC.mailComposeDelegate = self;

    [self presentViewController:mailVC animated:YES completion:nil];

}

当这个方法被触发时,首先发生的事情是(蓝色)视图控制器A立即垂直翻转而没有动画,无论出于何种原因(如第一个屏幕截图所示)→ 为什么?

接下来呈现的视图控制器B从底部移动到视图中(应该如此)。

呈现视图控制器 B

当关闭视图控制器B时,它会立即翻转并移出视图到顶部(而不是它来自的方向,如第二个屏幕截图所示)。

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
    [self dismissModalViewControllerAnimated:YES];
}

关闭视图控制器 B

这是 iOS 中的错误还是如何避免这种奇怪的行为?

(我只想要与普通纵向模式相同的标准动画来呈现视图控制器 - 没有这些翻转。)

4

1 回答 1

2

我猜这MFMailComposeViewController不支持颠倒的界面方向,这就是为什么它可以被解释为错误。Apple 建议不要对 iPhone 应用程序使用颠倒的界面方向。其主要原因可以通过这样的例子来解释:

  1. 用户打开应用程序并将 iPhone 旋转到倒置方向。
  2. 这时,有人打电话给他。
  3. 用户尝试接听电话却忘记将手机旋转到默认纵向。
  4. 因此,iPhone 的麦克风靠近用户的耳朵,扬声器靠近嘴巴。

这不是用户友好的体验。
我会考虑在您的网站上使用颠倒方向或不使用。

但是,如果需要使用颠倒的界面方向,那么您可以使用这样的技巧:
创建类别MFMailComposeViewController并覆盖方法supportedInterfaceOrientations以允许支持必要的方向并将其导入到类中MFMailComposeViewController

// MFMailComposeViewController+Orientation.h file
#import <MessageUI/MessageUI.h>

@interface MFMailComposeViewController (Orientation)

@end

// MFMailComposeViewController+Orientation.m file
#import "MFMailComposeViewController+Orientation.h"

@implementation MFMailComposeViewController (Orientation)

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
}

@end

注意:我不确定这个技巧是否会通过抛出 Apple 应用程序批准中心原因覆盖类别中现有的方法。

于 2014-04-23T16:33:32.920 回答