2016-12-27 11 views
0

私はUITableViewControllerを持っていて、それぞれを含んでおり、UICollectionViewの内容は完全に見えるはずです。私の問題は、UITableViewCellの高さを返すとき、その内容のUICollectionViewcontentSizeを計算する方法を理解できないため、正しい高さを返すことができないということです。UITableViewCell内のUICollectionView、UITableView動的高さ

+1

http://eithanshavit.com/2015/04/18/Dynamic_Size_UICollectionView_Cell.html – Amanpreet

+0

いくつかのコードを表示できますか?テーブルビューに追加するのではなく、コレクションビュー全体を使用しないのはなぜですか? – Joshua

+0

コードは次のURLから入手できます:https://drive.google.com/file/d/0B3bD5h4vCJXcc2hnSWk0TXd1LWs/view?usp=sharing –

答えて

0

はい、これを行うことができます。動的なテーブルビューの高さが必要な場合は、テーブルビューの推定高さも設定する必要があります。あなたがそうでないため、再利用可能なセルロジックAPIにあなたの細胞は、コレクションview.Whenあなたのセットアップインナーcollectionviewにデータを再ロードするために、外側テーブルビューの試みであなたの細胞と全く同じ高さを持っていることを確認する必要があり

tableView.rowHeight = UITableViewAutomaticDimension 
    tableView.estimatedRowHeight 

ます以前のコレクションビューを区別しない。

更新日:

を私は、細胞内のテーブルビューを保存していたケースがありました。

内部セルは、tableviewが格納されている場所のように見えます。

@IBOutlet weak var uploadedDocumentsTableView: UITableView! // has 0 to left right top botton margin to superview on storyboard prototype (Contenview) 
    @IBOutlet weak var tableViewCellHeight: NSLayoutConstraint! //To constraint the height of the tableview inside the cell. 


    //This function is called when the outer tableview delegate calls cellForRowAtIndexPath to deque a cell. 
    override func setupWithCellModel(cellModel: CRCustomerAreaDetailsCellModel) { 

    let castedCellModel = cellModel as? CRCustomerAreaDocumentUploadCellModel 
    if let documents = castedCellModel?.docUploadItem?.documents { 
     tableViewCellHeight.constant = CGFloat(documents.count * 60) 
    } 
    uploadedDocumentsTableView.reloadData() 
    } 

普通

extension CRCustomerAreaDocumentUploadV2GalleryCell: UITableViewDataSource { 

public func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return 60 
} 

public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    let castedCellModel = cellModel as? CRCustomerAreaDocumentUploadCellModel 
    if let documents = castedCellModel?.docUploadItem?.documents { 
     return documents.count 
    } 
    return 0 
} 

public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    ... 
    //Return your cell 
} 

}

私の外側のテーブルビューの高さは、自動寸法によって計算されますが、内側のテーブルビューのために、私は自分で高さを指定する必要があります。

+0

私は既にこれを行っていますが、これは他の場合にはうまくいきます...しかし、その場合UITableviewCell内のUICollectionVIewの...これは期待どおりに機能しません。 –

+0

UIScrollViewには、正しい組み込みコンテンツサイズがありません。 –

+0

はい、すべてのコレクションビューの行の高さが同じ場合はプロパティに格納できます。(numberOfrows * rowheight) –

0

私はこれについて何度も読んでいます。 TableViewCellの内部にCollectionViewを配置しないでください。大量のトラブル(フレーム落ちなど)が発生することがあります。代わりにStackViewを使ってみましたか?あなたはAsyncDiplayKitを試しましたか?

+0

私の要件は、動的なスクロール可能な項目を持つ垂直の動的なスクロール可能なページを持っているということです。これを行うための他のアイデア.... UIStackViewはこの場合に役立ちません –

0

申し訳ありませんが、UITableViewAutomaticDimensionを使用してコレクションビューに正しい組み込みコンテンツサイズがないため、内部でUICollectionViewでセルのサイズを判断することはできません。あなたはUITableViewDelegateのheight方法オーバーロードする必要があります

- (CGFloat)tableView:(UITableView *)tableView 
heightForRowAtIndexPath:(NSIndexPath *)indexPath; 

をそして、この方法から、正しい高さを返します。

もう一つの方法は、UICollectionViewが含まれており、コレクションビュー(私のコードからの例)の内容を制御するカスタムビューを作成することです:

- (CGSize)intrinsicContentSize 
{ 
    CGSize size = CGSizeMake(UIViewNoIntrinsicMetric, self.collectionView.collectionViewLayout.collectionViewContentSize.height); 

    return size; 
} 

- (void)addTags:(NSArray<BLTag*>*)tags 
{ 
    [_tagsList addObjectsFromArray:tags]; 

    [self _reloadData]; 
} 

このビューに戻り、正しい固有のコンテンツサイズので、あなたがセルにそれを挿入することができます自動寸法高さ。

関連する問題