【问题标题】:Autolayout constraints update with size classes自动布局约束随尺寸类更新
【发布时间】:2016-04-04 07:30:35
【问题描述】:

我知道,如何完美地创建具有大小类的自动布局约束。

但我不知道什么时候打电话给layOutIfNeeded()setNeedsDisplay()layOutSubViews()setUpdateConstraints()

有人能告诉我如何在约束改变后正确调用这个函数来更新 UI。

我关心的另一个问题是,何时只调用上面的单个函数并与其他函数一起调用。

【问题讨论】:

标签: ios layout autolayout constraints size-classes


【解决方案1】:

必须非常清楚,您的布局是由在运行时特定时间调用的例程计算的。
您可能需要修改当前布局,例如更改特定约束的constant。如果您只是这样做,您会注意到 UI 没有任何变化,这是因为仍然没有调用该例程。
您可以做的是强制调用布局例程,您可以通过以下两种方法来做到这一点:

  • setNeedsLayout :您说视图需要布局。下次调用该例程时,就知道该视图需要刷新布局
  • layOutIfNeeded(): 你不想等待下一个电话,你告诉系统尽快强制布局计算

setNeedsDisplay()displayIfNeeded() 也会发生同样的情况,第一个告诉您需要再次渲染视图,第二个告诉您尽快执行。
如果你问自己为什么,原因是性能。每次都重新渲染是没用的,这种懒惰的做法会节省系统资源。
- setNeedsUpdateConstraints-updateConstraintsIfNeeded 方法在约束中应用的概念基本相同,不同之处在于在强制布局之前您不会看到 UI 的任何变化,为什么这些方法有用?因为有时您需要在更改约束后检查布局是否仍然有效,而无需更改 UI 的外观。

【讨论】:

  • 那么,调用这些方法的正确顺序是什么。因为我正在使用具有大小类的自动布局,并且只想更新约束并仅针对该特定大小类正确显示。而是我应该调用哪些方法,以什么顺序,以考虑自适应大小类。
  • 修改约束-> setNeedsLayout->layOutIfNeeded
  • 现在,我只调用layOutIfNeeded();它没有正确更新。那么,我是否需要同时调用 setNeedsLayout() 和layOutIfNeeded() ?
猜你喜欢
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 2021-04-13
相关资源
最近更新 更多