我正在使用UITableViewController
并将UICollectionView
放在表格视图单元格的第二行中。问题是如何动态获取heightForRowAt。
我尝试过使用return UITableViewAutomaticDimension
。但是没有工作。
非常感谢任何帮助。
viewDidLoad中
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.estimatedRowHeight = self.tableView.rowHeight
self.tableView.rowHeight = UITableViewAutomaticDimension
}
的UITableViewController
选项1
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return self.tableView.bounds.width + 15
}
选项2
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
目前,我硬编码返回的数量。
UICollectionViewDataSource
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 15
}
UICollectionViewDelegate,UICollectionViewDelegateFlowLayout
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let layout = collectionViewLayout as! UICollectionViewFlowLayout
layout.minimumLineSpacing = 2.5
layout.minimumInteritemSpacing = 2.5
itemWidth = (collectionView.bounds.width - 5.0) / 3.0
return CGSize(width: itemWidth, height: itemWidth)
}
以下是使用return self.tableView.bounds.width + 15
的用户界面的图片:
以下是使用return UITableViewAutomaticDimension
的用户界面的图片:
这是约束的图像:
答案 0 :(得分:0)
在viewDidLoad()中尝试添加 - :
override func viewDidLoad() {
super.viewDidLoad()
yourTableView.estimatedRowHeight = 70 // this is your storyboard default cell height
yourtableView.rowHeight = UITableViewAutomaticDimension //Automatic dimensions
}
然后试试这个 - :
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
答案 1 :(得分:0)
在您的情况下,您必须为具有集合视图的单元格提供动态高度,具体取决于集合视图的内容高度,但在加载表视图时,时间可能是您的集合视图不会完全加载那个时候你的集合视图的内容高度可能不对。
为了获得正确的内容高度,您必须计算集合视图的内容高度,如下所示:
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
//Your cell which has a collectionview
if indexPath.row == 1{
let contentHeight = (numberOfCollectionViewcell*itemHeight)+collectionViewContentOffset
return contentHeight
}
return self.tableView.bounds.width + 15
}
答案 2 :(得分:0)
来自CollectionViewDelegate yon可以识别collectionview何时完全加载
获取CollectionView
内容高度。
通过创建委托将此内容高度发送到tableView
VC。
在委托方法reload tableView
。
在tableViewCell
CollectionView
已经重新加载,所以每当你执行上面的方法时,编译器会转到infinity来重新加载tableView和collectionView。为此你需要添加一个标志(isForcefullyReloadCollectionView
),当tableview是tableview需要重新加载时,标志为true,否则为false。您需要在强制重新加载tableView的位置添加此标志。
请执行以上操作,如果您需要进一步的帮助,可以询问。如果我有任何其他解决方案,那么我会更新你。