UIView autolayout:子视图的层次结构VS最小视图层次结构?

时间:2014-01-07 06:13:24

标签: ios objective-c uiview autolayout

我想知道哪个是实现视图的更好方法,该视图设计为具有复杂的子视图层次结构,例如左侧有一个子视图而右侧有一个子视图,左侧子视图有X个子视图在一列中的子视图中,右子视图在一行中具有Y个子子视图。 (X和Y变化)

实现它的两种方法:

  1. 自定义左视图和右视图(即.UIView子类),自定义左子视图,自定义右子视图,根视图仅处理自定义左视图和右视图,并配置其子子视图
  2. 左侧只有一个带有一列视图的视图(即左视图的子视图)和右侧的一行视图(即右视图的子视图)
  3. 第一种方法: 优点:

    1. 干净的层次结构意味着更好的可维护性。
    2. 责任分布在子视图上,因此每个视图中的复杂性更少
    3. 缺点:

      1. 嵌套子视图层次结构
      2. 由于自动布局,
      3. 可能性能更差
      4. 委托链更难,将每个子视图视为需要执行某些操作的按钮,自定义视图需要将操作一直委托回根视图
      5. 第二种方法: 优点:

        1. 较少的子视图
        2. 可能有更好的表现
        3. 与第一种方法相比,简单的委托链
        4. 缺点:

          1. 难以维护/修改,因为所有子视图都在一个级别,尤其是自动布局
          2. 凌乱的代码库,因为所有视图都在一个基本视图中
          3. 看起来第一种方法更好,但它仍然有几个缺点,是否有一种全新的方法来实现它来应对所有缺点?

1 个答案:

答案 0 :(得分:1)

两个子视图(左列和右列)必须有一些共同点,否则您不会同时显示它们。因为它们具有一般关系,所以选项2没有问题。话虽如此,我仍然更喜欢选项1,原因如下:

  • 清晰的层次结构更易于理解和维护。
  • 分发的查看逻辑更容易理解,并且会使您的类更小(这也意味着在其他地方重用子视图会更容易)。
  • May 表现更差”是一个很大的 MAYBE 。您应该使用Instruments或使用NSDatetimeIntervalSinceNow进行实际测量。只要约束始终安装在nearest common ancestor,您就可以了。
  • 授权和目标/行动不会那么糟糕self.firstView.subView.button.target = self

所有支持的硬件上的可接受性能应该是主要决定因素。可维护性应该紧随其后。

采用第一种方法。