自动布局约束随尺寸类更新
Posted
技术标签:
【中文标题】自动布局约束随尺寸类更新【英文标题】:Autolayout constraints update with size classes 【发布时间】:2016-04-04 07:30:35 【问题描述】:我知道,如何完美地创建具有大小类的自动布局约束。
但我不知道什么时候打电话给layOutIfNeeded()
、setNeedsDisplay()
、layOutSubViews()
、setUpdateConstraints()
。
有人能告诉我如何在约束改变后正确调用这个函数来更新 UI。
我关心的另一个问题是,何时只调用上面的单个函数并与其他函数一起调用。
【问题讨论】:
检查这个。 ***.com/questions/20609206/… 【参考方案1】:必须非常清楚,您的布局是由在运行时特定时间调用的例程计算的。
您可能需要修改当前布局,例如更改特定约束的constant
。如果您只是这样做,您会注意到 UI 没有任何变化,这是因为仍然没有调用该例程。
您可以做的是强制调用布局例程,您可以通过以下两种方法来做到这一点:
setNeedsLayout
:您说视图需要布局。下次调用该例程时,就知道该视图需要刷新布局
layOutIfNeeded()
: 你不想等待下一个电话,你告诉系统尽快强制布局计算
setNeedsDisplay()
和 displayIfNeeded()
也会发生同样的情况,第一个告诉您需要再次渲染视图,第二个告诉您尽快执行。
如果你问自己为什么,原因是性能。每次都重新渲染是没用的,这种懒惰的做法会节省系统资源。- setNeedsUpdateConstraints
和 -updateConstraintsIfNeeded
方法在约束中应用的概念基本相同,不同之处在于在强制布局之前您不会看到 UI 的任何变化,为什么这些方法有用?因为有时您需要在更改约束后检查布局是否仍然有效,而无需更改 UI 的外观。
【讨论】:
那么,调用这些方法的正确顺序是什么。因为我正在使用具有大小类的自动布局,并且只想更新约束并仅针对该特定大小类正确显示。而是我应该调用哪些方法,以什么顺序,以考虑自适应大小类。 修改约束-> setNeedsLayout->layOutIfNeeded 现在,我只调用layOutIfNeeded();它没有正确更新。那么,我是否需要同时调用 setNeedsLayout() 和layOutIfNeeded() ?以上是关于自动布局约束随尺寸类更新的主要内容,如果未能解决你的问题,请参考以下文章
Android 屏幕适配屏幕适配通用解决方案 ⑥ ( 约束布局 ConstraintLayout 百分比布局方案 | 将设计稿尺寸自动转为约束布局百分比标签属性 | 将输出结果设置到组件标签中 )
Android 屏幕适配屏幕适配通用解决方案 ⑥ ( 约束布局 ConstraintLayout 百分比布局方案 | 将设计稿尺寸自动转为约束布局百分比标签属性 | 将输出结果设置到组件标签中 )