【问题标题】:Why need override layoutSubviews为什么需要覆盖 layoutSubviews
【发布时间】:2015-03-06 06:48:02
【问题描述】:

在问题“When does layoutSubviews get called?”中列出了几种情况:

  1. 父视图已调整大小
  2. 设备旋转
  3. 还有吗?

如果不需要处理,对于UITableView,我们可以通过创建一个自定义的UIView来为section header创建一个header view。最简单的方法是通过initWithFrame: 创建UIView,然后就不需要重新布局了。

因此,在我看来,我们不需要覆盖layoutSubviews 等。但是有一些意见坚持要覆盖它。

不使用的原因:

  1. KISS(保持简单和愚蠢)
  2. 无需重新布局
  3. 滚动时重新布局有成本

我的问题是为这个案例获得更多建议。谢谢。

【问题讨论】:

  • 保持简单,愚蠢。不简单愚蠢:)

标签: ios uitableview uiview layoutsubviews


【解决方案1】:

您通常不需要覆盖layoutSubviews。基本上只有两个原因:

  • 您的自定义 UIView 子类包含您希望使用手动布局重新排列的子视图
  • 您的自定义 UIView 子类需要知道它的大小何时因其他原因而发生变化,例如缩小字体大小或进行一些手动绘图

一般来说,您不需要重写此方法。大多数布局是通过视图控制器在适当的时间设置视图的frame 或使用自动布局来完成的。

【讨论】:

  • 我仍然无法弄清楚如何正确使用 layoutSubviews 中的“手动布局”。你总是使用像'layoutDone'这样的标志还是每次调用方法时都计算它?如何防止约束被多次添加到视图中?
  • @petar 不,永远不要使用标志,也不要在那里添加约束。这个方法必须是幂等的。您只需在该方法中设置框架。
  • 因此,如果我有一个动态更新的视图(例如,我想将子视图添加到特定位置,或者重新排列当前添加的子视图等) - 这应该发生在哪里?假设我初始化了一个自定义视图,其中包含一组模型对象,当视图添加到超级视图时我希望显示这些对象。 (最初视图不会知道它的正确大小并且模型对象的布局不能正确发生) - 你认为这应该发生在哪里?非常感谢
  • 你应该发布一个新问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
相关资源
最近更新 更多