drawRect是否会更改内在内容大小?

时间:2016-08-07 08:27:22

标签: ios autolayout

我有一个UIView,它实现了自定义内在内容大小,偶尔会改变其大小。视图使用一组约束(前导/尾随等)相对于其超级视图定位

我知道每当我修改UIView用来确定其大小的数据时,我需要在视图上调用invalidateIntrinsicContentSize()来触发重新布局。

但是,我想知道drawRect和视图布局之间是否存在任何关系,即drawRect是否导致内在内容大小发生变化和/或使其无效?

1 个答案:

答案 0 :(得分:0)

要进入屏幕,需要执行3个步骤:

1)更新约束步骤
 2)布置步骤
 3)绘制步骤

那么,这些步骤中固有内容的大小在哪里?当视图更新约束时,它会查看内部内容大小以将非必需约束设置为其大小。每次调用invalidateIntrinsicContentSize()时,该视图都会了解到它应根据下一个更新周期中更新约束步骤中的新数据来更改这些约束。

然后,在第二步中,根据添加的所有约束,视图设置框架。它没有考虑内部内容的大小,只看到添加的大小限制。

在第三步中,视图甚至不知道您是否使用自动布局。在此步骤中,所有帧均已计算。而且视图只是在其框架中绘制。

因此,您的问题的答案为否。这些方法不能直接相互调用。有时会绘制多大的视图取决于固有内容的大小。但是在绘制过程中,固有内容的大小无法更改。