UITableCell高度不正确

时间:2017-04-10 11:16:10

标签: ios swift uitableview swift3

我为xib创建了UITableViewCell,在某些情况下会为其添加视图。

它需要做的是根据添加到单元格的视图量正确调整高度。

我所做的是以下内容 enter image description here UIImageUILabel的{​​{1}}设置为bottom constraint的{​​{1}}

top的{​​{1}}为UIView。因此,当没有视图添加到单元格时,它需要为0.当有单元格添加到单元格时,它需要正确调整大小。

我单元格的代码如下所示

UIView

然后我的表方法如下

height constraint

有人知道我哪里出错吗? 添加视图时,它的大小不正确。高度将保持为零。

更新

我已将问题的测试项目上传到GitHub。 https://github.com/MaikoHermans/tableCellDynamicHeightProblem

更新2

对于任何面临同样问题的人,我已将Update 1中提到的GitHub项目更新为工作解决方案。

2 个答案:

答案 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)

希望这可以为您提供输出。

感谢。