【问题标题】:UIView vs Container ViewUIView 与容器视图
【发布时间】:2014-09-11 15:31:50
【问题描述】:

这就是我要解决的问题。

在每个viewController 中,我都试图插入广告和实际的控制元素。我在 raywenderlinch.com 上完成了几个教程,以了解人们如何专业地将广告放入他们的应用程序中。他们使用 UIViews 在视图控制器的主视图下有两个视图。所以我完全明白,一个subview 持有广告,另一个持有实际应用内容。如果加载了广告,则占据屏幕,否则让其他视图拥有所有可用区域。

回到 xcode 后,我开始按照我在那里学习的方式进行编码。但是当我在情节提要上删除UIView 时,我看到了containerView,我认为在编写教程时它并不存在。
所以我在这里询问这两种方法及其优缺点。
所以基本上它的UIView vs ContainerView。我应该采取哪种方式,为什么?
任何帮助将不胜感激。

【问题讨论】:

  • @JoeBlow - 开始一个场景的好例子,但是我看不出该链接如何回答为什么/何时使用 UIContainerView 的问题。恕我直言,顶级“容器视图”也可以是常规“视图”。正如下面接受的答案所解释的那样,“当您需要嵌入 另一个视图控制器 时,您可以使用 UIContainerView”。因此,除非您的场景需要多个视图控制器,否则 UIContainerView 不是必需的。
  • @ToolmakerSteve - 完全正确。容器视图为您提供“另一个视图控制器”。在实践中,除了 Hello, World 应用程序......你总是需要“另一个视图控制器”。确实。
  • @Fattie - 但是您不需要为您添加的 每个 视图使用视图控制器 - 问题是何时添加容器视图,何时仅添加一个看法。我的观点是:该链接没有添加任何有助于在这两者之间做出决定的信息。我只是指出这一点,因为它需要阅读很多信息。
  • @ToolmakerSteve ,是的,一个很好的观点!干杯...

标签: ios xcode uiview uicontainerview iad


【解决方案1】:

当您已经拥有一个视图并且不需要专门的视图控制器来构建和处理其中的交互时,您可以使用UIView

UIView 帮助页面:

UIView 对象声明其封闭superview(其在视图层次结构中的父级)的矩形区域,并负责该区域中的所有绘图...

简化结构: YourViewController ---(有)---> UIView


当您需要在已有的视图控制器中嵌入另一个视图控制器时,您可以使用UIContainerView。嵌入式视图控制器负责为UIViewContainer 占用的区域返回视图。因此,您的UIContainerView 知道使用哪个视图控制器在它所占据的区域内渲染UIView

UIContainerView 帮助页面:

容器视图在视图控制器的视图子图中定义了一个区域,该区域可以包含子视图控制器。

简化结构: YourViewController ---(has)---> SubViewController ---(has)---> UIView

SubViewController 返回一个视图并处理其事件。

【讨论】:

    【解决方案2】:

    作为替代答案,您还可以考虑用例而不是技术差异。例如:为什么要使用容器视图?

    容器视图的一个常见用途是直接在情节提要中重用(共享)视图。以前,重用视图需要创建一个单独的“xib”文件,并在加载视图控制器时以编程方式添加该视图。

    上图来自this 非常简单、易于遵循的指南,该指南将引导您完成如何设置在 2 个以上视图控制器之间共享的容器视图。

    关于何时使用它的一些其他想法:

    • 导航栏是 UINavigationController which is a container view controller 的一部分。因此,如果您想构建自定义替代方案,您可能会使用容器视图。
    • 当您想在当前 VC 之上临时显示复杂视图但不能/不想以模态方式显示另一个 VC 时,容器可能会有所帮助。这种方法仍然允许您在界面构建器中构建该临时视图,为其设置自动布局约束等
    • 我还发现guide 解释说有一种方法可以根据情况切换不同的容器视图,允许您的 VC 拥有非常动态的子部分,而无需以编程方式构建这些子部分。来自该指南的图片展示了我所指的内容:

    希望这可以帮助那些试图弄清楚容器视图何时适用于他们的人。如果您有其他示例用例,请编辑/添加它们或将它们留在 cmets 中!

    【讨论】:

      【解决方案3】:

      如果您详细查看这些 UIView 类类型的容器视图。要了解我们为什么需要 containerView,您应该看到以下部分

      在大多数情况下,容器视图控制器就像内容视图控制器。它管理视图和内容,与应用程序中的其他对象协调,并响应响应者链中的事件。在设计容器控制器之前,您应该已经熟悉设计内容视图控制器。 “创建自定义内容视图控制器”中的设计问题也适用于创建容器。

      有关容器视图的更多详细信息,请转到 link 但是在开始之前你应该了解

      您也可以查看this tutorial 了解如何使用容器视图。

      因此,您可以同时采用这两种方法。 希望这会帮助你。快乐编码:)

      【讨论】:

      • 不回答问题。问题是为什么使用容器视图而不是常规 UIView,因为 any 视图能够包含其他视图。为了有用,需要澄清容器视图可以做什么,而常规视图不能做什么。 (但它确实包含可能对某人有用的链接,所以我没有投反对票,即使它没有回答问题。)
      猜你喜欢
      • 2017-12-23
      • 1970-01-01
      • 2016-03-04
      • 2013-12-10
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多