自动布局约束随尺寸类更新

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() ?

以上是关于自动布局约束随尺寸类更新的主要内容,如果未能解决你的问题,请参考以下文章

iOS如何激活/停用某个尺寸类(方向)的布局约束?

UITableView 最大尺寸,同时尊重自动布局约束

不同设备尺寸的 iOS 自动布局约束值

iOS 自动布局约束:忽略隐藏或零尺寸视图?

Android 屏幕适配屏幕适配通用解决方案 ⑥ ( 约束布局 ConstraintLayout 百分比布局方案 | 将设计稿尺寸自动转为约束布局百分比标签属性 | 将输出结果设置到组件标签中 )

Android 屏幕适配屏幕适配通用解决方案 ⑥ ( 约束布局 ConstraintLayout 百分比布局方案 | 将设计稿尺寸自动转为约束布局百分比标签属性 | 将输出结果设置到组件标签中 )