禁止 UITableViewcontroller 在横向旋转(保持纵向)

Posted

技术标签:

【中文标题】禁止 UITableViewcontroller 在横向旋转(保持纵向)【英文标题】:Disable UITableViewcontroller from rotating in Landscape (keep it Portrait) 【发布时间】:2014-11-21 16:31:16 【问题描述】:

我正在尝试将 UITableViewcontroller 保持为纵向。因此,我不想旋转到横向模式。我添加了以下方法。但这并没有帮助,请注意我使用的是 ios 8:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    // Return YES for supported orientations
     if(interfaceOrientation== UIInterfaceOrientationPortrait)
    
        return YES;
    else
    
        return NO;
    


注意:我通过 UINavigationController 调用 UITableView

UINavigationController *navigationController = [[UINavigationController alloc]
                                                    initWithRootViewController:svc];
    // configure the new view controller explicitly here.




    [self presentViewController:navigationController animated:YES completion: nil];

【问题讨论】:

【参考方案1】:

shouldAutorotateToInterfaceOrientation: 自 iOS 6.0 起已被弃用。你应该使用supportedInterfaceOrientationsshouldAutorotate

你是这样做的:

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

    return UIInterfaceOrientationPortrait;


- (NSUInteger)supportedInterfaceOrientations

    return UIInterfaceOrientationMaskPortrait;


- (BOOL)shouldAutorotate

    return NO;

编辑 - 为UINavigationController

这是一种可能的方法:

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

    if ([self.visibleViewController isKindOfClass:[UITableViewController class]])
        return UIInterfaceOrientationPortrait;
    else
        return [super preferredInterfaceOrientationForPresentation];


- (NSUInteger)supportedInterfaceOrientations

    if ([self.visibleViewController isKindOfClass:[UITableViewController class]])
        return UIInterfaceOrientationMaskPortrait;
    else
        return [super supportedInterfaceOrientations];


- (BOOL)shouldAutorotate

    if ([self.visibleViewController isKindOfClass:[UITableViewController class]])
        return NO;
    else
        return [super shouldAutorotate];

请注意,您不能强制设备方向,因此如果应用程序处于横向状态,然后您推送表格视图控制器,它仍将处于横向状态。有很多方法可以解决这个问题:

通过显示要求用户先旋转设备的警报来阻止用户打开表格视图控制器。 隐藏表格视图并显示带有消息(或其他指示符)的标签,告诉用户旋转他们的设备。 处理两个方向。

【讨论】:

...谢谢,但它仍在旋转...注意我正在使用情节提要,这样做有什么不同。 不,不应该。在这些方法中添加断点以确保它们被调用。 哦,刚刚注意到您对UINavigationController 的更新。当visibleViewController 是您的表视图控制器时,您需要继承 that 并覆盖这些方法以返回 portrait 如果您能更新您的答案以解释我是如何做到的,我将不胜感激。因为 eI 已经继承了 UITableViewController ?谢谢。【参考方案2】:

shouldAutorotateToInterfaceOrientation: 已弃用。相反,使用:

- (NSUInteger)supportedInterfaceOrientations

     return UIInterfaceOrientationMaskPortrait;


- (BOOL)shouldAutorotate

     return NO;
 

【讨论】:

以上是关于禁止 UITableViewcontroller 在横向旋转(保持纵向)的主要内容,如果未能解决你的问题,请参考以下文章

如何将选定的 UITableViewController 值添加到以前的 UITableViewController?

在动态 UITableViewController 的标头中嵌入静态 UITableViewController

当转到另一个 UITableViewController 时 UITableViewController 冻结

重新加载 UITableViewController

删除单元格 - UITableviewController

iOS 7 - PopOver 中的 UITableViewController 可以找到带有错误的 segue Receiver(UITableViewController) has no segu