有没有办法可以获得UITableView
中每行的行高。我有一个UITableView
,其中包含动态数据,我正在使用
self.tableView.rowHeight = UITableViewAutomaticDimension
使动态行高。
但是我想改变整体UITableView
的高度,因为重新加载数据后我需要所有行的高度。
我尝试使用
self.tableView.layoutIfNeeded()
self.tableViewHeightContraint.constant = self.tableView.contentSize.height
但是由于不明原因,我在UITableView
中添加了3或4条记录之后,它给我的身高低于其确切的高度,所以想到了其他方式。计算每行的高度,然后将它们相加。
我正在使用Xcode 7.2,iOS 9和Swift 2
答案 0 :(得分:1)
var dictionaryOfCellHeight = [Int : CGFloat]()
var dataArray = [String]()
func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
if dictionaryOfCellHeight[indexPath.row] == nil
{
var frame : CGRect = tableView.rectForRowAtIndexPath(indexPath)
if indexPath.row == dataArray.count
{
dictionaryOfCellHeight[indexPath.row] = frame.size.height
//calculate total height and reload table
}
else
{
dictionaryOfCellHeight[indexPath.row] = frame.size.height
}
}
}
答案 1 :(得分:1)
在Swift 3.0中
让myRowHeight = yourTableView.rowHeight
答案 2 :(得分:0)
要更改Tableview
的高度,您不需要计算所有UITableViewCell
的高度并设置为TableView
。
在height
方法中正确设置每个UITableViewCell
的{{1}}。这会自动将可滚动高度设置为heightForRowAtIndexPath
答案 3 :(得分:0)
您可以使用此
CGRect frame = [tableView rectForRowAtIndexPath:indexPath];
NSLog(@"row height : %f", frame.size.height);
使用frame.size.height
可以获得特定行的高度
答案 4 :(得分:0)
这是因为self.tableView.contentSize.height
返回行数* estimatedRowHeight
,这不等于表视图的实际高度。你需要的是通过visibleCells
获得单个单元格高度,然后将它们相加以获得表格视图的高度。
答案 5 :(得分:0)
表格可能没有调整其内容的大小,因此如果您尝试使用[self. tableView layoutSubviews];
来强制调整大小,则可能会有效。 [self. tableView layoutIfNeeded];
不一定会强制更新。
答案 6 :(得分:0)
注意:我的section数组存储.data var
中的行let heightOfAllRows:CGFloat = sections.enumerated().map { arg -> [(section:Int,row:Int)] in
return arg.element.data.indices.map{ i in
(section:arg.offset,row:i)
}
}.flatMap{$0}.reduce(0){
return $0 + self.tableView(self, heightForRowAt: .init(row: $1.row, section: $1.section))
}