当UIView通过autolayout调整大小时,会调用什么方法?

Mic*_*ael 9 resize frame uiview ios autolayout

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

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

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

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

Lou*_*Tur 7

来自以下文档updateConstraints:

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

....

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

或者来自以下文档layoutSubviews:

仅当子视图的自动调整大小和基于约束的行为不提供所需的行为时,才应覆盖此方法.您可以使用实现直接设置子视图的框架矩形.

但如果您需要在轮换时进行此操作,请查看 willTransitionToTraitCollection:withTransitionCoordinator:

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