重新加载UIView和UILabel框架

时间:2015-06-26 03:42:50

标签: ios uiview autolayout setneedsdisplay

我在nib文件中有两个UILabels和一个UIView。这个笔尖是我collectionView的标题。在我的viewForSupplementaryElementOfKind:方法中,我需要更改这三个对象的帧。它们会根据header.personCollege标签的大小进行更改。

[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];

问题是setNeedsDisplay不会更改框架。只有在调用reloadData后才会更改帧。我需要立即改变帧。我也在使用autoLayout。

1 个答案:

答案 0 :(得分:3)

由于您使用的是AutoLayout,因此您应该更改'常数'与视图关联的约束值,而不是直接更改其框架。

您可以首先为要更改的约束创建IBOutlets / IBOutletCollection,然后使用这些IBoutlet,您可以更改其常量'值。