2

我用 MonoTouch 5 做了一个项目。升级到 MonoTouch 6 后,我的 UIViewControllers 不再自动旋转。这些托管在 tabviewcontroller 中。我收到这个警告:

ShouldAutorotateToInterfaceOrientation(MonoTouch.UIKit.UIInterfaceOrientation)' overrides obsolete member `MonoTouch.UIKit.UIViewController.ShouldAutorotateToInterfaceOrientation(MonoTouch.UIKit.UIInterfaceOrientation)'. Add the Obsolete attribute to ShouldAutorotateToInterfaceOrientation(MonoTouch.UIKit.UIInterfaceOrientation)' (CS0672) 

但是在我调试时仍然会调用该方法。新的ShouldAutorotate永远不会被调用。有任何想法吗?谢谢!

4

2 回答 2

2

可能有几个原因。其中之一是您应该(如果还没有)RootViewController在您的 AppDelegate 中设置(此处的另一个链接)。在 iOS6 之前,这不是必需的。

另一个是开始使用新的 iOS6 API,而不保留早期 iOS 版本的回退。这将符合您的评论,即适用于 6.0 但不适用于 5.1

请注意,由于您仍然以 iOS 5.x 为目标,您可以放心地忽略过时的警告。iOS 6 引入了新的 API 来处理旋转,但它会自动回退到旧 API 以保持与现有应用程序的兼容性。

这也意味着,如果您开始使用新的(仅限 iOS6)API,那么您将需要自己处理旧 API ,否则旋转将不适用于 iOS 5.x。

老实说,我认为这是一场测试噩梦——你最好让 iOS 处理这个并保留一个单一的代码路径来处理旋转。这就是为什么我强烈建议您继续使用旧 API,直到您的部署目标最低版本变为 iOS 6.0。

于 2013-01-25T18:26:37.430 回答
0

升级后我遇到了同样的问题,我在这里得到了问题的答案。这是问题的核心,引用自链接:

应用程序窗口应该在应用程序启动结束时有一个根视图控制器

因此,如果以前像我一样,您在 main.cs 的 FinishedLaunching(UIApplication app) 方法中有这个:

window.AddSubview(mainVC.View);

用这个替换它:

window.RootViewController = mainVC;

就是这样!快乐的时光!旋转再次起作用。:) 至少它为我解决了这个问题。

我不知道这个导致应用程序出错的小事情是苹果的错还是 Monotouch/Xamarin 的错,但我认为 Xamarin 团队应该为此做点什么。当然这是可以在编译时检测和纠正的东西吗?

反正。希望这些信息可以帮助其他人节省这个问题花费我的时间!

于 2013-08-08T07:56:42.927 回答