Ios UITableViewCell无法根据其包含的动态集合视图调整高度
让我从解释视图层次结构开始。 我使用的是普通的UITableView,在UITableView单元格中有一个高度动态的collectionView 如何在UITableView的willDisplay单元格中设置UICollectionView的数据源和委托:Ios UITableViewCell无法根据其包含的动态集合视图调整高度,ios,swift,uitableview,uicollectionview,Ios,Swift,Uitableview,Uicollectionview,让我从解释视图层次结构开始。 我使用的是普通的UITableView,在UITableView单元格中有一个高度动态的collectionView 如何在UITableView的willDisplay单元格中设置UICollectionView的数据源和委托: func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { if in
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if indexPath.section == 0 {
guard let collectionCell = cell as? movieListingTableViewCell else { return }
collectionCell.setCollectionViewDataSourceDelegate(self, forRow: indexPath.row)
collectionCell.selectionStyle = .none
}
}
collectionView具有顶部、底部、前导、尾随和高度约束
然后我使用高度约束并将其设置为collectionView高度,就像在UITableView单元子类中一样
override func layoutSubviews() {
timingCollectionHeight.constant = timingCollection.collectionViewLayout.collectionViewContentSize.height
}
结果是,我的细胞没有正常显示,因为其中有空格。例如,如果有一个UITableView单元的collectionView具有较大的高度,那么其他UITableView单元也会以某种方式使用相同的高度。滚动表格后,单元格显示正确。Swift示例 首先,在tableViewCell类中获取collectionViewHeightConstraint的出口,如下所示:-
@IBOutlet weak var collectionViewHeight: NSLayoutConstraint!
然后在ViewController类的viewDidLoad()方法中添加以下tableViewCell动态高度代码:-
myTableView.estimatedRowHeight = 100; // Default tableViewCell height
myTableView.rowHeight = UITableViewAutomaticDimension;
然后在tableView单元格内添加以下代码,以根据CollectionView高度更新tableView单元格的高度:-
cell.frame = tableView.bounds; // cell of myTableView
cell.layoutIfNeeded()
cell.myCollectionView.reloadData()
cell.collectionViewHeight.constant = cell.myCollectionView.collectionViewLayout.collectionViewContentSize.height;
希望这有帮助。
快乐编码:)另一种方法:
将UITableView单元格高度设置为动态后
tableView.estimatedRowHeight = 100
tableView.rowHeight = UITableViewAutomaticDimension
class DynamicCollectionView: UICollectionView {
override func layoutSubviews() {
super.layoutSubviews()
if !__CGSizeEqualToSize(bounds.size, self.intrinsicContentSize) {
self.invalidateIntrinsicContentSize()
}
}
override var intrinsicContentSize: CGSize {
return collectionViewLayout.collectionViewContentSize
}
}
flowLayout.estimatedItemSize = CGSize(width: 1,height: 1)