我是UITableView,在我的其中一个单元格中,我已经以编程方式添加了UICollectionView
但是在显示UICollectionView之后,UITableViewCell只显示了UICollectionView的第一行
这是我的UITableView代码:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 4 {
let collectionViewCell = tableView.dequeueReusableCell(withIdentifier: "collectionViewCell", for: indexPath) as! collectionViewCell
collectionViewCell.contentView.backgroundColor = hexStringToUIColor(hex: "#eeeeee")
return collectionViewCell
}
}
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
这是我的UITableView自定义Cell,其中包含UICollectionView:
private class collectionViewCell : UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
private let reuseableCell = "CellId"
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseableCell)
setupViews()
}
override func layoutSubviews() {
super.layoutSubviews()
}
let imagesCollectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.backgroundColor = UIColor.white
collectionView.translatesAutoresizingMaskIntoConstraints = false
collectionView.showsHorizontalScrollIndicator = false
collectionView.showsVerticalScrollIndicator = false
return collectionView
}()
func setupViews() {
backgroundColor = UIColor.black
addSubview(imagesCollectionView)
imagesCollectionView.dataSource = self
imagesCollectionView.delegate = self
imagesCollectionView.backgroundColor = hexStringToUIColor(hex: "#eeeeee")
imagesCollectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseableCell)
addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": imagesCollectionView]))
addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": imagesCollectionView]))
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 5
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = imagesCollectionView.dequeueReusableCell(withReuseIdentifier: reuseableCell, for: indexPath)
cell.backgroundColor = .green
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: 100, height: 200) // 68
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsetsMake(0, 0, 0, 0)
}
所以有什么帮助?
答案 0 :(得分:1)
请添加以下heightForRowAt方法和estimatedRowHeight并检查
tableView.estimatedRowHeight = 100 //Any Value you want
tableView.rowHeight = UITableViewAutomaticDimension
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
return UITableViewAutomaticDimension
}
答案 1 :(得分:1)
UICollectionView不会根据其内容自动增长,因此表格单元格也不会自动增长。
您必须为UICollectionView设置高度约束,并根据内容高度更改约束常量。然后,如果您为UICollectionView的边设置约束等于单元格的内容视图,则单元格也将自动调整高度。
希望这会有所帮助。