Reload UIView and UILabel Frame

468 views Asked by At

I have two UILabels and a UIView in a nib file. This nib is the header to my collectionView. In my viewForSupplementaryElementOfKind: method, I need to change the frames of these three objects. They are being changed according to the size of header.personCollege label.

[header.personCollege sizeToFit];
CGRect boxFrame = header.boxView.frame;
boxFrame.origin.x = header.personCollege.frame.origin.x + header.personCollege.frame.size.width + 11;
header.boxView.frame = boxFrame;

CGRect yearFrame = header.personYear.frame;
yearFrame.origin.x = boxFrame.origin.x + boxFrame.size.width + 11;
header.personYear.frame = yearFrame;

[header.personYear setNeedsDisplay];
[header.personCollege setNeedsDisplay];
[header.boxView setNeedsDisplay];

The problem is, setNeedsDisplay does not change the frames. The frames are only changed after a call to reloadData. I need the frames changed instantly. I am also using autoLayout.

1

There are 1 answers

0
tek3 On BEST ANSWER

Since you are using AutoLayout, you should change 'constant' value of the constraints associated with the views, rather than directly changing their frames.

You can start by creating an IBOutlets/IBOutletCollection to the constraints you want to change and then using those IBoutlets you can change their 'constant' value.