我正在为iOS5和iOS6构建应用程序。我在UINavigationController中有这个UIViewController,我希望它保持纵向模式。
该代码适用于iOS5,但不适用于iOS6。
// iOS5 rotation
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if (interfaceOrientation == UIInterfaceOrientationPortrait)
return YES;
else
return NO;
}
// iOS6 rotation
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
这里有什么问题?在SO上我发现了很多类似的问题,但一般来说答案对我不起作用。
修改 也许我不准确,但我需要一个SINGLE视图控制器(我的应用程序的主页)保持纵向模式而不是所有的应用程序。
答案 0 :(得分:7)
首先,很大程度上取决于你的UIViewController嵌入哪个控制器。
例如,如果它在UINavigationController中,那么你可能需要将UINavigationController子类化为覆盖这样的方向方法。
子类化UINavigationController(层次结构的顶层视图控制器将控制方向。)需要将其设置为self.window.rootViewController。
- (BOOL)shouldAutorotate
{
return self.topViewController.shouldAutorotate;
}
- (NSUInteger)supportedInterfaceOrientations
{
return self.topViewController.supportedInterfaceOrientations;
}
从iOS 6开始,UINavigationController不会要求其UIVIewControllers提供方向支持。因此我们需要将其子类化。
<强>此外强>
然后,对于你只需要PORTRAIT模式的UIViewControllers,编写这些函数
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return (UIInterfaceOrientationMaskPortrait);
}
对于需要LANDSCAPE的UIViewControllers,将屏蔽更改为All。
- (NSUInteger)supportedInterfaceOrientations
{
return (UIInterfaceOrientationMaskAllButUpsideDown);
//OR return (UIInterfaceOrientationMaskAll);
}
现在,如果您想在Orientation更改时进行一些更改,请使用此功能。
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
}
非常重要
在AppDelegate中写这个。这非常重要。
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
return (UIInterfaceOrientationMaskAll);
}
如果您只想为所有viewcontrollers提供纵向模式,请应用portait遮罩。即UIInterfaceOrientationMaskPortrait
否则,如果您希望某些UIViewControllers保留在Portrait中,而其他人支持所有方向,则应用ALL Mask。即UIInterfaceOrientationMaskAll
答案 1 :(得分:0)
试试这个:
-(BOOL)shouldAutorotate
{
return NO;
}
-(NSUInteger)supportedInterfaceOrientations
{
UIInterfaceOrientationMask orientationMask = UIInterfaceOrientationMaskPortrait;
return orientationMask;
}
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
这应该只是为了支持肖像模式。