我为xib
创建了UITableViewCell
,在某些情况下会为其添加视图。
它需要做的是根据添加到单元格的视图量正确调整高度。
我所做的是以下内容
UIImage
和UILabel
的{{1}}设置为bottom constraint
的{{1}}
top
的{{1}}为UIView
。因此,当没有视图添加到单元格时,它需要为0.当有单元格添加到单元格时,它需要正确调整大小。
我单元格的代码如下所示
UIView
然后我的表方法如下
height constraint
有人知道我哪里出错吗? 添加视图时,它的大小不正确。高度将保持为零。
更新
我已将问题的测试项目上传到GitHub。 https://github.com/MaikoHermans/tableCellDynamicHeightProblem
更新2
对于任何面临同样问题的人,我已将Update 1中提到的GitHub项目更新为工作解决方案。
答案 0 :(得分:1)
首先,您必须为包含内部单元格的UIView
声明一个自定义类,并定义类似于此的内在大小属性
class CustomAutoresizableView: UIView {
var subCells : [MenuTableCellContents
] = []{
didSet
{
///Your code for add cells
self.invalidateIntrinsicContentSize()
}
}
override var intrinsicContentSize: CGSize
{
get
{
return CGSize(width: self.frame.width, height: CGFloat(self.arrayOfValues.count * 40))
}
}
}
然后你必须为主单元提供正确的约束,并在垂直方向设置高内容压缩阻力值,我使用1000,之后你必须在MenuViewController
{{1}中添加这两行}
viewDidLoad
你的cellForRowAtIndexPath中的需要替换这个
self.menu_table.rowHeight = UITableViewAutomaticDimension
self.menu_table.estimatedRowHeight = 40
由此
if let subCells = content.subCells {
cell.subCells = subCells
}
修改
替换
cell.yourCustomAutoresizableViewProperty.subCells = content.subCells
有了这个
var subCells: [MenuTableCellContents] = [] {
willSet {
addSubCells()
self.invalidateIntrinsicContentSize()
}
您还需要在添加新单元格之前执行此方法,因为您可以将多个单元格添加到另一个单元格
var subCells: [MenuTableCellContents] = [] {
didSet{
addSubCells()
self.invalidateIntrinsicContentSize()
}
}
我希望这对您有所帮助,如果您对此有任何疑问,请告诉我
答案 1 :(得分:0)
由于您的问题没有提供足够的信息,但我仍然会为投票提供一个机会。
首先,您设置单元格的标签行0和属性"自动换行"。 其次,试试这个(运行并检查它是否已完成,如果没有,请按照以下选项进行操作)。
接着, 使用功能
label.intrinsicContentSize().height
获取文本在标签中的高度,然后设置它的高度,并通过添加其他空格来计算单元格的高度。
在下面的函数
中返回新的单元格高度tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath)
希望这可以为您提供输出。
感谢。