我有一个 UIView
,它实现了自定义的固有内容大小,并且偶尔会更改其大小。 View 使用一组约束(前导/尾随等)相对于其父 View 定位
我知道每当我修改 UIView
用来确定其大小的数据时,我需要在 View 上调用 invalidateIntrinsicContentSize()
以触发重新布局.
但是,我想知道 drawRect
和 View 布局之间是否存在任何关系,即 drawRect
是否会导致固有内容大小发生变化和/或使其无效?
最佳答案
在 View 进入屏幕之前有 3 个步骤:
1)更新约束步骤
2)布局步骤
3)绘图步骤
那么,这些步骤中的内在内容大小在哪里?当 View 更新约束时,它会查看内在内容大小以将非必需约束设置为其大小。每次调用 invalidateIntrinsicContentSize() 时, View 都知道它应该根据下一个更新周期更新约束步骤中的新数据更改这些约束。
然后,在第二步中, View 根据添加的所有约束设置框架。它不查看内在内容大小,它只看到添加的大小限制。
在第三步, View 甚至不知道你是否使用自动布局。在这一步中,所有的帧都已经计算好了。 View 仅在其框架中绘制。
因此,您的问题的答案是否定的。这些方法不能直接相互调用。有时会绘制多大的 View 取决于内在内容的大小。但是在绘制过程中,固有内容的大小是不能改变的。
关于ios - drawRect 会改变内部内容的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38812323/