In my application , the tableview is having different types of custom cells with different heights. I want to put a view below this tableView, for which I need to calculate
The easiest thing I can think of would be to set your view as the table's tableFooterView
UITableView is a subclass of UIScrollView, therefore you can use the instance method contentSize on your tableview:
yourtableView.contentSize.height
Should give you the height of your tableview content view
I think what you're looking for is self.view.bounds.size.height
.
Check out Oliver Drobnik's detailed post on creating a pull-to-reload table view. In his case it's easier, because the view is at the top, so he checks for a negative contentOffset.
If you want it at the bottom, you could check for scrollView.contentOffset.y > (self.view.bounds.size.height + pullToReloadViewHeight)
This is an old question, but, today I've solved my problem with this
func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 44 // >= 2
}
func getTableViewHeight() -> CGFloat{
tableView.reloadData()
tableView.layoutIfNeeded()
return tableView.contentSize.height + tableView.contentInset.bottom + tableView.contentInset.top
}
If you've implemented your own custom cells, then you've probably already implemented this function in your table delegate:
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
Just iterate through your rows, calling this function for each one, and sum up the result.
i have calc height in viewDidLayoutSubviews() for content view controller. Work for me (table view automatic cell dimensions);
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews();
let height = table.contentSize.height+table.contentInset.bottom+table.contentInset.top
preferredContentSize = CGSize(width: 305, height: height);
}