最佳实践:将 Size 类 用于单 table 视图到双 table 视图

Best Practices: Using Size Classes for Single table view to dual table view

我知道 'best practices' 是 Whosebug 的禁忌,但无论如何我都会试一试,因为我认为这很重要并且需要一个具体的答案。自动布局是新的,并且随着最近宣布的 iPad 并排多任务处理,自动布局的细微差别变得前所未有的重要。

我的情况:我的应用程序将有两个列表。在 iPhone 上,一次只能查看一个。我可以做到这一点:

  1. 有一个 ViewController 可以在两个列表数据数组之间切换。
  2. 有两个 ViewController,每个都有自己的 table 视图和数据
  3. 有一个 ViewController 和两个 table,但一个总是隐藏的
  4. 更好的选择?

我的具体问题: 在 iPad 我希望两个列表同时并排显示。 iPhone 和 iPad 都将 运行 应用程序仅纵向显示(不支持横向)我看到一些提供并排视图的选项:

  1. 不确定如何与选项 #1 并排工作,除了以编程方式为 iPad 布局添加第二个 table
  2. iPhone 版本的两个 VC 将在 iPad 版本中并排出现,使用以前隐藏的容器视图将 VC2 添加到 VC1
  3. 两个table同时可见
  4. 更好的选择?

如果能回答如何实现此功能,我将不胜感激。虽然我了解每个选项的概念,但我不了解具体的 steps/code,因此不胜感激。谢谢。

我的应用程序中有这个确切的场景,我使用了选项 #2。

对于 iPad,它将使用 w-Regular h-Regular 尺寸 class。 此 site 具有出色的视觉效果和对尺寸 classes 的解释。

  • 在 Interface Builder 中,切换到 w-Regular h-Regular 大小 class。

  • 在 w-Regular h-Regular 中,从对象库中拖出一个容器视图(Interface Builder 的右下角)并将其放置在您的视图中。

  • 在 w-Regular h-Regular 中,根据需要设置约束,以便在新布局中考虑容器视图。
    • 可能需要关闭现有约束。您可以在约束中的尺寸检查器中执行此操作。请注意,在下图中我的约束已安装。单击 Installed 复选标记左侧的 + 以 卸载 它 w-Regular h-Regular 大小 class.
    • 另一种卸载约束的方法是在屏幕对象的大小检查器中突出显示约束并按删除。它实际上并没有删除约束,它只是从当前大小 class.
    • 卸载它

  • Link VC 到容器视图。 ctrl-drag 从 Container 到 VC 以创建嵌入转场。您还需要添加代码以仅在 iPad 上使用此嵌入转场。通过在 IB 中选择 segue 并转到 Attributes Inspector,为 segue 提供一个标识符。在下面的示例代码中,我调用了 segue EmbedSegueName。

    - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender  {
    
        if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && [identifier isEqualToString:@"EmbedSegueName"]) {
            return YES;
        }
    
        return NO;
    }
    
  • 不允许访问第二个 VC。我不知道您如何在 iPhone 上显示两个不同的 VC,但在我的应用程序中我使用的是 UITTabBarController。这就是我从我的应用程序中 iPad 的选项卡栏中删除额外 VC 的方法。

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    
        //  Remove the tab bar item because it will be contained in the iPad's layout.
        //  In this example, it's removing the 2nd tab bar item.
        NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[self.tabBarController viewControllers]];
        [viewControllers removeObjectAtIndex:1];
        [self.tabBarController setViewControllers:viewControllers animated:YES];
    }
    

提示: 如果您 运行 进入错误 运行 宁 iPhone 版本并且它抱怨容器视图(即使它是未安装在 iPhone 的大小 classes 上),尝试将容器视图放入另一个视图,看看是否能解决问题。

我希望这足以让您入门。