UIView调用autolayout调用什么方法?

我有一个图像视图,我通过重写我的子类中的以下实现圆angular:

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

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

我使用autolayout,我想知道什么方法的UIView(因此UIImageView)被调用时,我的约束调整视图,以便我可以重新计算我的angular落半径,每当这种resize发生。 我(显然是错误的)的假设是,自动布局系统调用setFrame:移动/调整视图的大小。

updateConstraints上的文档:

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

….

在执行布局之前,将会调用updateConstraints的实现,允许您在自定义视图的属性没有改变的时候validation所有必要的内容约束。

或从layoutsubviews上的文档:

只有当子视图的基于自动调整和基于约束的行为不提供所需的行为时,才应该重写此方法。 你可以使用你的实现直接设置子视图的框架矩形。

但是如果你需要在willTransitionToTraitCollection:withTransitionCoordinator:修改中做这个,请查看willTransitionToTraitCollection:withTransitionCoordinator:

此方法的实现者可以使用它来根据newCollection参数中的值调整接口。 此方法的一个常见用法是在当前大小类更改时更改高级呈现样式。