【问题标题】:UIView autolayout: hierarchy of subviews VS minimum views hierarchy?UIView自动布局:子视图的层次结构VS最小视图层次结构?
【发布时间】:2014-01-24 17:57:24
【问题描述】:

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

两种实现方式:

  1. 自定义左右视图(即UIView子类),自定义左子子视图,自定义右子子视图,根视图只处理自定义左右视图,他们配置自己的子子视图
  2. 只有一个视图,左侧有一列视图(即左视图的子视图),右侧有一排视图(即右视图的子子视图)

第一种方法: 优点:

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

缺点:

  1. 嵌套子视图层次结构
  2. 可能由于自动布局而性能更差
  3. 委托链比较困难,把每个子视图看成一个按钮,需要执行某些动作,自定义视图需要将动作一直委托回根视图

第二种方法: 优点:

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

缺点:

  1. 难以维护/修改,因为所有子视图都在一个级别,尤其是使用自动布局时
  2. 代码库混乱,因为所有视图都在一个基础视图中

看起来第一种方法更好,但它仍然有几个缺点,是否有一种全新的方法可以解决所有缺点?

【问题讨论】:

    标签: ios objective-c uiview autolayout


    【解决方案1】:

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

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

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

    采用第一种方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2017-07-11
      • 2023-04-03
      相关资源
      最近更新 更多