我正在尝试创建一个 UITableViewController,它有一个 UICollectionViewController 作为它的 tableHeaderView。此集合视图的高度将根据(重新)加载的内容而有所不同。
它在行动中:
截至目前,我可以通过根据单元格数计算 childViewController 的高度然后设置其 preferredContentSize 属性来调整 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;
}
这行得通,但这很臭。我希望自动布局为我解决这个问题,但我无法弄清楚如何/在哪里让 parentViewController.tableHeaderContainerView 自动调整大小以适应其内容视图控制器。
我继承并正在重写的代码使用 UIView/nib 作为表头视图,但是这个实现很混乱,因为父视图控制器已经有太多事情要做了。似乎将它移动到它自己的视图控制器是要走的路,但我必须先解决这个调整大小的问题。