我使用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
。有任何想法吗?谢谢!
答案 0 :(得分:2)
可能有几个原因。其中之一是你应该(如果还没有)在AppDelegate中设置RootViewController
(另一个链接here)。在iOS6之前不需要这样做。
另一个开始使用新的iOS6 API,而没有为早期的iOS版本保留回退。这符合您的评论,即适用于6.0但不适用于5.1 。
请注意,由于您仍然定位iOS 5.x,因此可以安全地ignore过时的警告。 iOS 6引入了新的API来处理轮换,但它将自动回退到旧API,以保持与现有应用程序的兼容性。
这也意味着如果您开始使用新的(仅限iOS6)API,那么您需要自己处理旧API ,或者旋转不适用于iOS 5.x 。
老实说,我认为这是一个测试的噩梦 - 你最好让iOS处理这个并保持一个代码路径来处理轮换。这就是为什么我强烈建议您继续使用旧API,直到您的部署目标最小版本变为iOS 6.0。
答案 1 :(得分:0)
升级后我遇到了同样的问题,我得到了问题over here的答案。这是问题的核心,引自链接:
应用程序窗口应在应用程序启动结束时具有根视图控制器
所以,如果以前像我一样,你在main.cs中的FinishedLaunching(UIApplication应用程序)方法中有这个:
window.AddSubview(mainVC.View);
替换为:
window.RootViewController = mainVC;
就是这样!快乐的时光!轮换再次工作。 :)至少它解决了我的问题。
我不知道导致应用程序出错的这个小问题是Apple的错还是Monotouch / Xamarin的错,但我认为Xamarin团队应该对此做些什么。当然这可以在编译时检测和纠正吗?
反正。希望这些信息可以为其他人节省这个问题花费我的时间!