【问题标题】:MFMailComposeViewController and MFMessageComposeViewController have wrong bounds after rotation in iOS 8MFMailComposeViewController 和 MFMessageComposeViewController 在 iOS 8 中旋转后边界错误
【发布时间】:2015-02-24 15:18:21
【问题描述】:

我有一个主要只使用纵向模式的应用程序。但是,当它呈现MFMailComposeViewControllerMFMessageComposeViewController 时,它能够旋转到横向。这在 iOS 8 之前一直运行良好,它们仍在旋转,但它们的边界似乎遵循错误的方向。

我的应用程序处于纵向模式,并展示了其中一个控制器。当我将手机旋转到横向时,我得到以下结果:

MFMailComposeViewController:

MFMessageComposeViewController:

编辑: 以下是展示作曲家的代码:

MFMailComposeViewController *mailComposeViewController = [[MFMailComposeViewController alloc] init];
mailComposeViewController.mailComposeDelegate = self;
[mailComposeViewController setSubject:subject];
[mailComposeViewController setMessageBody:body isHTML:NO];

[self presentViewController:mailComposeViewController animated:YES completion:^{
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}];

编辑: 如果我检查 View Debugger 中的视图,我可以看到尽管 UIWindow 已旋转为横向,但没有任何底层视图具有。这包括UITransitionViewUILayoutContainerView

【问题讨论】:

  • 我假设您在 AppDelegate 中创建豁免?你能显示那个代码吗
  • 你在考虑`application:supportedInterfaceOrientationsForWindow:`方法吗?我们没有使用这个。相反,我们在 plist 中允许纵向和横向,然后在我们的视图控制器中使用 shouldAutorotatesupportedInterfaceOrientations
  • 请添加演示项目
  • Leo,我已经尝试在另一个应用程序中复制这种行为,但我做不到,所以演示项目可能不会有任何好处。存在此问题的应用程序非常大,并且是由另一个团队开发的。所以我想我主要是在寻找可能导致这种行为的建议。
  • 你如何展示模型?可以添加演示代码吗?

标签: ios iphone ios8 mfmailcomposeviewcontroller mfmessagecomposeview


【解决方案1】:

这不是解决方案,而是分享我的经验。 我还构建了一个仅遵循纵向方向的应用程序。 但是当我尝试以任何设备方向打开 MFMailComposeViewControllerMFMessageComposeViewController 时,它只会以纵向显示。

我仅在看到您的问题时才检查此问题。 我以与您相同的方式呈现它们。 我正在共享我使用过的目标设置和 .plist 条目。请看看他们中的任何一个是否有帮助。

【讨论】:

  • Rinto,您的应用程序运行正常。您的目标设置中只有肖像,其中将包括MFMailComposeViewController。另一方面,我有纵向、横向右侧和横向左侧,所以我的MFMailComposeViewController 将能够旋转到横向,它确实如此。只是乱七八糟的。
  • 好的。 iOS 8 附带了一些方向更改。您可以在此链接中检查相同的内容。 link 我认为与这个特定问题无关。仍然有一些亮点。
【解决方案2】:

iOS8 存在一些与旋转相关的问题,无法正常工作。值得先检查一下。它在应用程序委托中进行了简单的一行编辑。

UISplitViewController rotation iOS8 not working as expected

【讨论】:

  • Rory,我自己也怀疑过这样的事情,但我查了一下,项目中似乎没有这样的代码。
  • 如果项目是手动创建的或由最近的 xcode 创建的,则该行可能不存在。我认为它似乎是由 xcode 5 或更早版本创建的,但它从未将其删除。那里是否有任何其他代码可以创建 UIWindow?如果情节提要有一个初始控制器集,我认为不需要代码,并且在该函数中创建 UIWindow 会导致旋转问题:硬件旋转但窗口不旋转,因此您可以在横向看到纵向。
【解决方案3】:

willRotateToInterfaceOrientation:duration:didRotateToInterfaceOrientation: 等方法现在在 iOS 8 中已弃用,并由 viewWillTransitionToSize:withTransitionCoordinator: 取代。根据您在应用中处理轮换的方式,您可能需要对代码进行更改以适应新方法。

【讨论】:

  • 我们根本没有使用这些方法。另外,我相信这只会影响我们自己的视图控制器和 nok MFMailComposeViewController
猜你喜欢
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 2013-11-07
  • 2020-05-26
  • 2014-04-21
  • 2016-12-23
相关资源
最近更新 更多