当 UIView 通过自动布局调整大小时,会调用什么方法?

2024-05-11

我有一个图像视图,我通过在子类中覆盖以下内容来实现圆角:

-(void)setFrame:(CGRect)frame {
  [super setFrame:frame];
  [self.layout setCornerRadius:frame.size.width/10.0];
}

这对于图像的初始显示非常有用,但是如果图像的大小由于设备旋转或其他某种机制而发生变化,则不会调用此方法来实现调整大小。

我正在使用自动布局,并且我想知道当我的约束调整视图大小时调用 UIView (以及 UIImageView)的什么方法,以便我可以在每次调整大小时重新计算我的角半径。我的(显然错误的)假设是自动布局系统称为setFrame:根据需要移动/调整视图大小。


从文档开始updateConstraints:

自己设置约束的自定义视图应该通过重写此方法来实现

....

在执行布局之前,将调用 updateConstraints 的实现,允许您在自定义视图的属性未更改时验证内容的所有必要约束是否都已到位。

或者从文档中layoutSubviews:

仅当子视图的自动调整大小和基于约束的行为未提供您想要的行为时,您才应该重写此方法。您可以使用您的实现直接设置子视图的框架矩形。

但如果您需要对旋转更改执行此操作,请查看 willTransitionToTraitCollection:withTransitionCoordinator:

此方法的实现者可以使用它根据 newCollection 参数中的值来调整接口。此方法的常见用途是在当前尺寸类别更改时更改高级表示样式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 UIView 通过自动布局调整大小时,会调用什么方法? 的相关文章

随机推荐