2

olarak değişken boy alt görünümü çocuk denetleyicisi Table UCollectionViewController'ı tableHeaderView olarak kullanan bir UITableViewController oluşturmaya çalışıyorum. Bu koleksiyon görünümü, ne yüklendiğine bağlı olarak yüksekliğe göre değişir.UITableView'ın tableHeaderView

İşte temel düzen. enter image description here

Ve işte eylem içinde:

enter image description here

an itibariyle, ben tableHeaderView daha sonra preferredContentSize özelliğini ayarlayarak hücrelerin sayısını temel childViewController yüksekliğini hesaplayarak yeniden boyutlandırmak alabilirsiniz.

- (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; 
} 

Bu çalışır, ancak bu kokuyor:

- (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]; 
} 

Bu arada, üst görünüşüdür denetleyicisi, bu yöntem, daha sonra containerView karenin gibi güncelleme geçersiz kılar. Autolayout'un bunu benim için halletmesini isterdim, ancak içerik görüntüleme denetleyicisine uyacak şekilde otomatik olarak yeniden boyutlandırmak için parentViewController.tableHeaderContainerView öğesinin nasıl/nerede kullanılacağını anlayamıyorum.

Kaldığım ve yeniden yazdığım kod, tablo üstbilgisi görünümü için UIView/nib kullanmaktadır, ancak bu uygulama, ana görünüm denetleyicisinin zaten yapacak çok fazla yapması nedeniyle dağınıktır. Görünüşe göre, bunu kendi görünüm denetleyicisine taşımak gibi bir yol var, ama önce bu yeniden boyutlandırma sorununu çözmem gerekiyor.

cevap

0

Koleksiyon görünümünün içeriklerini izlemek için KVO'yu kullanabilir ve değiştiğinde tercih edilenContentSize değerini ayarlayabilirsiniz.