サブビューの配列を持つView Controllerがあります。これらのサブビューは、縦に次々と配置されるカスタム 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;
}
}