I have a \'master\' UITableView, in which I use different cells that are loaded from .xib\'s. Some of these cells themselves also have a UITableView.
For now I have
You could create the object which will create template object of class you want to put in cell, put data in it, calculate its size and return it on sizeForItem method of master tableView. That way you will be able to set returned calculated size for item when master tableView is preparing data.
This is the way i do it in my projects.
You could improve this object with cache, make it generic and use everywhere you may need to.
First Approach:
Create a subclass for child tableView and override intrinsicContentSize.
class MyOwnTableView: UITableView {
override var intrinsicContentSize: CGSize {
self.layoutIfNeeded()
return self.contentSize
}
override var contentSize: CGSize {
didSet{
self.invalidateIntrinsicContentSize()
}
}
override func reloadData() {
super.reloadData()
self.invalidateIntrinsicContentSize()
}
}
In Interface builder change the class of your child tableView to MyOwnTableView (subclass UITableView).
Set automatic row height for both the parent and child table view.
tableView.estimatedRowHeight = 60.0;
tableView.rowHeight = UITableViewAutomaticDimension;
Second Approach: 1. Create a height constraint with any value for child tableView and conect an IBOutlet that sets the child tableView height. 2. Set the height constraint's constant to tableView.contentSize.height
self.tableViewHeight.constant = self.tableView.contentSize.height