限制某些视图的自动旋转

Posted

技术标签:

【中文标题】限制某些视图的自动旋转【英文标题】:restricting autorotation on certain views 【发布时间】:2013-04-05 13:21:25 【问题描述】:

我的应用程序包含两个表视图控制器。在第一个中,我希望视图能够左右旋转(除了纵向模式),但是在第二个表视图控制器中(我在从第一个表中点击一个单元格后导航到)我想要它只能在纵向模式下查看。我试过这段代码,但它不起作用,它一直在旋转。

- (NSUInteger)supportedInterfaceOrientations 
    return UIInterfaceOrientationMaskPortrait;


- (BOOL) shouldAutorotate 
    return NO;

注意:我确实从项目目标的“摘要”选项卡中启用了左/右/纵向方向。有什么办法吗?

【问题讨论】:

检查这个“***.com/questions/12772749/…” 【参考方案1】:

为 UINavigationController 创建一个类别,其中包括以下方法:

(适用于 ios 6 和 iOS 5)

- (BOOL)shouldAutorotate
    
        return self.topViewController.shouldAutorotate;
    

    - (NSUInteger)supportedInterfaceOrientations
    
        return self.topViewController.supportedInterfaceOrientations;
    

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
        return [self.topViewController shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
    

然后在你的控制器中实现这些方法

第一:

- (BOOL)shouldAutorotate 
    return YES;


- (NSUInteger)supportedInterfaceOrientations 
    if (RUNNING_IPAD) 
        return UIInterfaceOrientationMaskAll;
    
    else 
        return UIInterfaceOrientationMaskAllButUpsideDown;
    ;


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
    if (RUNNING_IPAD) 
        return YES;
    
    else 
        return toInterfaceOrientation != UIInterfaceOrientationMaskPortraitUpsideDown;
    

第二个:

- (BOOL)shouldAutorotate 
    return NO;


- (NSUInteger)supportedInterfaceOrientations 
       return UIInterfaceOrientationMaskPortrait;


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
        return NO;

项目的旋转设置应如下所示:

【讨论】:

谢谢!我确实找到了一个更简单的答案,但我选择了这个,因为它同时支持 ios 5 和 6,我的只支持 6。【参考方案2】:

其实我找到了解决问题的方法:

-(BOOL)shouldAutorotate
    return YES;


-(NSInteger)supportedInterfaceOrientations
    return UIInterfaceOrientationMaskPortrait;

即使您在项目 Traget 的“摘要”选项卡中切换了左/右方向,这也会将视图限制为纵向。

【讨论】:

以上是关于限制某些视图的自动旋转的主要内容,如果未能解决你的问题,请参考以下文章

您可以将 UIView Clip Subviews 限制在视图的某些方面吗?

按角色限制对烧瓶视图功能的某些区域的访问?

如何限制对 Access 中某些列的访问

如何将 touchesBegan 和 touchesEnded 限制为仅一次触摸?

限制向用户显示某些数据

MVC 部分限制非管理员用户的视图访问