2016-01-15 21 views
6

我在UITableViewCell中有UICollectionView。因此,層次結構是這樣的:在UICollectionView中禁用滾動並將其大小調整爲包裹所有單元格

的UITableView - >的UITableViewCell - > UICollectionView - > UICollectionViewCell

我想在這裏實現爲UICollectionView禁用滾動,並使它看起來像一個大名單項目。所有內容都是動態創建的。那麼,如何根據其單元調整UICollectionView的大小。它的高度應該等於全部UICollectionViewCells

謝謝!

編輯:我設法禁用滾動,它的工作。然後嘗試調整單元的大小,但它似乎沒有做任何事情:

cell.viewscollectionview.scrollEnabled = false 
cell.viewscollectionview.frame = CGRectMake(0, 0, tableView.frame.width, 800) 
+0

看看[本教程(http://www.raywenderlich.com/87975/dynamic-table-view-cell-身高 - ios-8-swift),可能會幫助你。您將最終擁有兩個動態高度:1)「UICollectionView」的高度基於「UICollectionViewCells」x的高度; 2)「UITableViewCell」的高度應該等於「UICollectionView」更新後的高度。 – mathielo

+0

那麼,如何更改UIcollectionView的高度,無論我做什麼,它都與故事板中設置的一樣。 –

+0

故事板是否有任何限制? – lukasbalaz7

回答

1

嘗試使用自動佈局。 使用集合視圖高度約束。在開始時保持它不變。隨着向單元添加數據,通過更改高度約束的常量來調整集合視圖的高度。

1

您必須在tableView委託中計算內部heightForRowAt的UICollectionView高度。

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 

    // constants, should be initialized somewhere else 
    let totalItem: CGFloat = 20 
    let totalCellInARow: CGFloat = 3 
    let cellHeight: CGFloat = 120 

    let collViewTopOffset: CGFloat = 10 
    let collViewBottomOffset: CGFloat = 10 

    let minLineSpacing: CGFloat = 5 

    // calculations 
    let totalRow = ceil(totalItem/totalCellInARow) 
    let totalTopBottomOffset = collViewTopOffset + collViewBottomOffset 
    let totalSpacing = CGFloat(totalRow - 1) * minLineSpacing // total line space in UICollectionView is (totalRow - 1) 
    let totalHeight = (itemHeight * totalRow) + totalTopBottomOffset + totalSpacing 

    return totalHeight 
} 

對於完全教程,你可以在這裏閱讀:https://medium.com/@adinugroho/fixed-height-uicollectionview-inside-uitableview-79f24657d08f

相關問題