What method is called on UIView when it's resized by autolayout?

两盒软妹~` 提交于 2019-12-23 07:30:06

问题


I have an image view that I'm implementing rounded corners on by overriding the following in my subclass:

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

This works great for the initial display of the image, but if the size of the image changes due to device rotation or some other mechanism, this method does not get called to implement the resize.

I'm using autolayout, and I want to know what method of UIView (and thus UIImageView) is being called when my constraints resize the view so that I can recalculate my corner radius whenever this resize takes place. My (apparently false) assumption was that the autolayout system called setFrame: to move / resize views as needed.


回答1:


From the docs on updateConstraints:

Custom views that set up constraints themselves should do so by overriding this method

....

Before layout is performed, your implementation of updateConstraints will be invoked, allowing you to verify that all necessary constraints for your content are in place at a time when your custom view’s properties are not changing.

Or from the docs on layoutSubviews:

You should override this method only if the autoresizing and constraint-based behaviors of the subviews do not offer the behavior you want. You can use your implementation to set the frame rectangles of your subviews directly.

but if you need to do this on rotational changes, check out willTransitionToTraitCollection:withTransitionCoordinator:

Implementors of this method can use it to adapt the interface based on the values in the newCollection parameter. A common use of this method is to make changes to the high-level presentation style when the current size class changes.



来源:https://stackoverflow.com/questions/28501903/what-method-is-called-on-uiview-when-its-resized-by-autolayout

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!