Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 428
Michael Avatar asked Feb 13 '15 14:02

Michael


Video Answer


1 Answers

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.

like image 56
Louis Tur Avatar answered Jan 04 '23 06:01

Louis Tur