我有一个视图控制器,它有一组子视图。这些子视图是一个接一个垂直放置的自定义 UIView。子视图的高度不一致;它们的高度基于实例化它们时使用的数据。此外,我想支持设备旋转,以便子视图的 UILabels 将在横向模式下水平扩展并且更短。
我在以一种好的方式实现这一点时遇到了很多麻烦。当视图控制器布置它的子视图时,我觉得我没有明确的方法来确定每个子视图的高度(因为我此时已经实例化了它们,但没有设置它们的框架)。请参阅下面的代码以了解我的挫败感。
layoutSubviews
如果在视图控制器的方法之前调用子视图的方法,我真的很喜欢viewWillLayoutSubviews
,但事实并非如此。
MyViewController.m
....
- (void)initWithDataObjects:(NSArray*)dataObjects
{
_dataObjects = dataObjects;
}
- (void)viewDidLoad
{
mySubviews = [[NSMutableArray alloc] init];
for (DataObject* do in _dataObjects) {
MyCustomView *customView = [[MyCustomView alloc] initWithDataObject:do];
[mySubviews addObject:customView];
[self.view addSubview:customView];
}
}
- (void)viewWillLayoutSubviews
{
int currentHeight = 0;
for (MyCustomView *customView in mySubviews) {
int subviewHeight = customView.frame.size.height;
// PROBLEM: subviewHeight is 0 because the subview hasn't called layoutSubviews yet..
[customView setFrame:CGRectMake(0, currentHeight, self.view.frame.size.width, subviewHeight)];
currentHeight += subviewHeight;
}
}