表视图内容的Swift高度

时间:2016-12-09 09:47:30

标签: swift uitableview height constraints

有没有办法找出表格视图内容的高度,除了从所有部分添加所有单元格的高度?

我有3个部分,每个部分有不同的高度单元格和可变数量的单元格。 所以我希望有一个系统方法来获取表视图内容的高度。

编辑:在其他类似问题的答案中没有说它在哪里调用tableView.contentSize

3 个答案:

答案 0 :(得分:5)

您可以通过以下方式检索内容大小:

Swift / ObjC:

let contentSize : CGSize = self.tableView.contentSize
let width = self.tableView.contentSize.width
let height = self.tableView.contentSize.height

您可以使用它来了解您的UITableView是否已加载(Swift 2.2):

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    if indexPath.row == (tableView.indexPathsForVisibleRows!.last! as! NSIndexPath).row {
        // End of loading
        let contentSize : CGSize = self.tableView.contentSize
        let width = self.tableView.contentSize.width
        let height = self.tableView.contentSize.height
    }
}

答案 1 :(得分:2)

使用tableview的内容大小属性来获取其中的内容高度:

tableView.layoutIfNeeded
let tblSize = tbl_Data.contentSize
print(tbl_Data.contentSize.height)

答案 2 :(得分:0)

  1. 设置表格视图高度出口。
  2. 现在使用获取表视图内容大小并将其设置为 willDisplayCell作为表格视图的高度。
  3. 不要忘记标签数据是否多于1行然后设置标签行 是0。

    覆盖func viewDidLoad(){         super.viewDidLoad()         //重新加载Tableview         tblData.reloadData()     }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell =  tableView.dequeueReusableCellWithIdentifier("myTableViewCell", forIndexPath: indexPath) as! myTableViewCell
        return cell
    }
    
     func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }
    
     //Content wise tableview height
    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
         constTblDataHeight.constant = tblData.contentSize
    }