私は、tableHeaderViewとしてUICollectionViewControllerを持つUITableViewControllerを作成しようとしています。このコレクションビューは、読み込まれたものに応じて高さが異なります。可変高さの子ビューコントローラをUITableViewのtableHeaderViewとして表示
そして、ここではアクションである。今のよう
、私はそのpreferredContentSizeプロパティを設定するセルの数に基づいてchildViewControllerの高さを計算することによって、サイズを変更するtableHeaderViewを得ることができます。
- (void)reloadCollectionView {
// Calculate size based on static cell height and layout
_cellCount = arc4random_uniform(40) + 1;
NSUInteger h = ceil(_cellCount/2.0);
// This informs the parent view controller of the size change
self.preferredContentSize = CGSizeMake(self.collectionView.bounds.size.width, 20 * h);
// Load the new number of cells
[self.collectionView reloadData];
}
一方、親ビューコントローラに、私はこの方法がそうのようなcontainerViewフレーム更新しオーバーライド:
- (void)preferredContentSizeDidChangeForChildContentContainer:(id<UIContentContainer>)container {
[super preferredContentSizeDidChangeForChildContentContainer:container];
// Make new CGSize to update tableHeaderView's height and reassign tableHeaderView property (required for UI refresh)
CGSize size = [container preferredContentSize];
_tableHeaderContainerView.frame = CGRectMake(0, 0, self.view.bounds.size.width, size.height);
self.tableView.tableHeaderView = _tableHeaderContainerView;
}
これは動作し、これは臭いを。 autolayoutが私のためにこれを処理したいのですが、parentViewController.tableHeaderContainerViewをどのようにしてコンテンツビューコントローラに合わせて自動的にサイズを変更するかを把握することはできません。
私が継承して書き直しているコードでは、テーブルヘッダービューにUIView/nibが使用されていますが、この実装は親ビューコントローラがあまりにも多すぎるので面倒です。これを独自のビューコントローラーに移動する方法がありますが、まずこのサイズ変更の問題に取り組まなければなりません。