开发者

Calculate the table's contentSize.height with custom cells of different types iphone

In my application , the tableview is having diffe开发者_StackOverflow中文版rent types of custom cells with different heights. I want to put a view below this tableView, for which I need to calculate the table contentView height, how can I do it?

Earlier I used to do it like: (noOfRows * cell_height), but that was for static heights.

Thanx in advance.


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


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
    }


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);
}


The header and footer of the section are not considered in the height of the table, consider this

CGSize sz = self.table.contentSize;
sz.height += self.table.contentInset.bottom +
             self.table.contentInset.top + 
             self.table.numberOfSections * self.table.sectionHeaderHeight;


The easiest thing I can think of would be to set your view as the table's tableFooterView


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)


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜