2

私は、tableHeaderViewとしてUICollectionViewControllerを持つUITableViewControllerを作成しようとしています。このコレクションビューは、読み込まれたものに応じて高さが異なります。可変高さの子ビューコントローラをUITableViewのtableHeaderViewとして表示

ここに基本的なレイアウトがあります。 enter image description here

そして、ここではアクションである。今のよう

enter image description here

、私はその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が使用されていますが、この実装は親ビューコントローラがあまりにも多すぎるので面倒です。これを独自のビューコントローラーに移動する方法がありますが、まずこのサイズ変更の問題に取り組まなければなりません。

答えて

0

KVOを使用すると、コレクションビューのcontentSizeを監視し、preferredContentSizeを変更したときにpreferredContentSizeを設定できます。

関連する問題