最佳实践:将大小类用于单表视图到双表视图

Posted

技术标签:

【中文标题】最佳实践:将大小类用于单表视图到双表视图【英文标题】:Best Practices: Using Size Classes for Single table view to dual table view 【发布时间】:2015-07-29 17:02:22 【问题描述】:

我知道“最佳实践”是 *** 的禁忌,但无论如何我都会试一试,因为我认为这很重要并且需要一个具体的答案。自动布局是新的,并且随着最近发布的 iPad 并排多任务处理,自动布局的细微差别从未像现在这样重要。

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

    一个 ViewController 可以在两个列表数据数组之间切换。 有两个 ViewController,每个都有自己的 tableView 和数据 有一个 ViewController 和两个表,但一个总是隐藏的 更好的选择?

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

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

我将不胜感激有关如何实现此功能的答案。尽管我了解每个选项的概念,但我不了解具体的步骤/代码,因此将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

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

对于 iPad,它将使用 w-Regular h-Regular 尺寸类。 这个site 对尺寸等级有很好的视觉和解释。

在 Interface Builder 中,切换到 w-Regular h-Regular 尺寸类。

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

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

将 VC 链接到容器视图。 ctrl-drag 从 Container 到 VC 以创建嵌入 segue。您还需要添加代码以仅在 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 的尺寸等级上),请尝试将容器视图放入另一个视图并看看能不能解决问题。

我希望这足以让你开始。

【讨论】:

谢谢!这是我在任何论坛上读到的最清晰的解释之一。

以上是关于最佳实践:将大小类用于单表视图到双表视图的主要内容,如果未能解决你的问题,请参考以下文章

如何将消息插入取决于会话值的视图。 ASP.NET MVC。最佳实践

以瀑布模式排列图像的最佳实践

将领域与回收者视图一起使用的最佳实践?

ViewModel 最佳实践

在 iOS 中添加应用程序范围的标题视图的最佳实践

Django 视图链接/重定向最佳实践