我知道,如何使用大小类完美地创建自动布局约束。
但我没有收到何时致电layOutIfNeeded()
,setNeedsDisplay()
,layOutSubViews()
,setUpdateConstraints()
。
有人可以告诉如何在约束更改后正确调用此函数来更新UI。
另一个问题是,何时只调用上面的单个函数并使用其他函数调用。
答案 0 :(得分:0)
必须非常清楚,您的布局是由在运行时的特定时间调用的例程计算的
您可能需要修改当前布局,例如更改特定约束的constant
。如果您这样做,您会注意到UI中没有任何变化,这是因为该例程仍未被调用
您可以做的是强制调用布局例程,并通过以下两种方法执行此操作:
setNeedsLayout
:您告诉视图需要布局。下次调用例程时,知道此视图需要进行布局刷新layOutIfNeeded()
:您不想等待下一个电话,而是告诉系统尽快强制进行布局计算同样的事情发生在setNeedsDisplay()
和displayIfNeeded()
上,第一个告诉你需要再次渲染一个视图,而第二个告诉你要尽快完成。
如果你问自己为什么,原因就是表现。每次重新渲染一切都没用,这种懒惰的方法将节省系统资源
方法- setNeedsUpdateConstraints
和-updateConstraintsIfNeeded
基本上是应用于约束的相同概念,不同之处在于,在强制布局之前,您不会看到UI中的任何更改,为什么这些方法有用?因为有时你需要在约束更改后进行检查,如果布局仍然有效而不改变UI的方面。