ios - drawRect 会改变内部内容的大小吗?

标签 ios autolayout

我有一个 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/

相关文章:

iphone - iOS iPhone 是否可以克隆 UIView 并将其自身绘制到两个 UIView 上?

ios - 在 iOS 中检索特定国家/地区的国家/地区电话代码

swift - 以编程方式创建自动调整大小的 TableView

iphone - UILabel sizeToFit 和约束

android - 在Android或iOS上的其他应用程序上从youtube应用程序获取事件

javascript - iOS safari 上何时提示用户位置权限是如何确定的?

ios - 应用内购买偶尔崩溃

ios - Swift - 向 UITextfield 添加带有间距的底线

iOS - 更改 UIStackView 中文本字段的高度

swift - 在 Swift 中将 MPMoviePlayerController 正确放置在 UIView 中