我有一个使用 6.1 SDK 的 Monotouch 6.0.10 iPhone 应用程序,但针对 iOS 4.0 及更高版本,我尝试使用 ShouldAutorotateToInterfaceOrientation 仅将其中一个视图强制为纵向,但未成功。我意识到它现在已被弃用,但仍然需要支持 iOS4/iOS5 设备。
为了尝试隔离问题,我编写了一个最小的测试应用程序。它没有 XIB,并且有一个带有一个选项卡的 UITabBarController。该选项卡有一个 UINavigationController 并且 UINavigationController 有一个 UIViewController(带有一个 hello world 按钮可以单击)。
在 AppDelegate 我有:
tabController = new TabController();
window.RootViewController = tabController;
在 UITabBarController 和 UINavigationController 我有:
public override bool ShouldAutorotateToInterfaceOrientation(UIInterfaceOrientation toInterfaceOrientation)
{
return true;
}
在 UIViewController 我有:
public override bool ShouldAutorotateToInterfaceOrientation(UIInterfaceOrientation toInterfaceOrientation)
{
if ( toInterfaceOrientation == UIInterfaceOrientation.Portrait )
{
return true;
}
else
{
return false;
}
}
好吧,至少在 iOS 6.1 设备上,那些 ShouldAutorotateToInterfaceOrientation 似乎完全被忽略了。没有达到断点,如果我在每种情况下都强制它们返回 false,旋转仍然会发生。
我的理解是,ShouldAutomaticallyForwardRotationMethods 默认为 true,因此似乎无法提供解决方案。除了 Glen Schmidt 的建议外,没有运气梳理了论坛:iOS 6 轮换:supportedInterfaceOrientations 不起作用?但不幸的是,我不知道如何将其转换为 MonoTouch:
引用
If you want to replicate the pre-iOS 6 behaviour where all the views in the navigation stack / tab bar have to agree on an allowable set of orientations, put this in your subclass of UITabBarController or UINavigationController:
- (NSUInteger)supportedInterfaceOrientations
{
NSUInteger orientations = [super supportedInterfaceOrientations];
for (UIViewController *controller in self.viewControllers)
orientations = orientations & [controller supportedInterfaceOrientations];
return orientations;
}
取消报价
我也明白我什至不能希望通过 ShouldAutoRotate/SupportedInterfaceOrientations 为我的 iOS6 用户解决它,因为这会导致 iOS4/IOS5 旋转失败。
任何建议都非常感谢!
账单。