title: UITableView inside UITableViewCell with dynamic height
body: <p>I need to put UITableView inside UITableViewCell with auto-layout because second table has different number of rows and one row can have different height.<br>
  This is my ViewController</p>
  
  <pre><code>class ViewController: UIViewController {
  
      let tableView = UITableView()
      let cellId = "firstTableCellId"
  
      override func viewDidLoad() {
          super.viewDidLoad()
          setupView()
          tableView.reloadData()
          view.backgroundColor = UIColor.gray
      }
  
      func setupView() {
          tableView.delegate = self
          tableView.dataSource = self
          tableView.separatorStyle = .none
          tableView.register(NextTable.self, forCellReuseIdentifier: cellId)
          tableView.backgroundColor = UIColor.green
          tableView.separatorStyle = .singleLine
  
          view.addSubview(tableView)
          view.addConstraintsWithFormat("V:|-60-[v0]-5-|", views: tableView)
          view.addConstraintsWithFormat("H:|-8-[v0]-8-|", views: tableView)
      }
  }
  
  extension ViewController: UITableViewDelegate {
  
  }
  
  extension ViewController: UITableViewDataSource {
      func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&gt; Int {
          return 2
      }
  
      func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -&gt; CGFloat {
          return UITableViewAutomaticDimension
      }
  
      func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -&gt; CGFloat {
          return 80
      }
  
      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&gt; UITableViewCell {
          let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! NextTable
          cell.layoutIfNeeded()
          return cell
      }
  }
  </code></pre>
  
  <p>And NextTable which is the cell in first table</p>
  
  <pre><code>class NextTable: UITableViewCell {
  
      var myTableView: UITableView!
      let cellId = "nextTableCellId"
  
      override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
          super.init(style: style, reuseIdentifier: reuseIdentifier)
          backgroundColor = UIColor.brown
          setupView()
          myTableView.reloadData()
      }
  
      required init?(coder aDecoder: NSCoder) {
          super.init(coder: aDecoder)
      }
  
      let label: UILabel = {
          let label = UILabel()
          label.numberOfLines =  0
          label.lineBreakMode = .byWordWrapping
          label.text = "Next table:"
          label.textColor = UIColor.black
          label.sizeToFit()
          label.backgroundColor = UIColor.cyan
          return label
      }()
  
      func setupView() {
          myTableView = UITableView()
          myTableView.delegate = self
          myTableView.dataSource = self
          myTableView.separatorStyle = .singleLineEtched
          myTableView.backgroundColor = UIColor.blue
          myTableView.register(TableCell.self, forCellReuseIdentifier: cellId)
          myTableView.isScrollEnabled = false
  
          addSubview(myTableView)
          addSubview(label)
          addConstraintsWithFormat("H:|-30-[v0]-30-|", views: myTableView)
          addConstraintsWithFormat("H:|-30-[v0]-30-|", views: label)
  
          addConstraint(NSLayoutConstraint(item: label, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 15))
          addConstraint(NSLayoutConstraint(item: myTableView, attribute: .top, relatedBy: .equal, toItem: label, attribute: .bottom, multiplier: 1.0, constant: 0))
          addConstraint(NSLayoutConstraint(item: label, attribute: .bottom, relatedBy: .equal, toItem: myTableView, attribute: .top, multiplier: 1.0, constant: 0))
          addConstraint(NSLayoutConstraint(item: myTableView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: -15))
      }
  }
  
  extension NextTable: UITableViewDelegate {
  
  }
  
  extension NextTable: UITableViewDataSource {
  
      func numberOfSections(in tableView: UITableView) -&gt; Int {
          return 1
      }
  
      func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&gt; Int {
          return 5
      }
  
      func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -&gt; CGFloat {
          return UITableViewAutomaticDimension
      }
  
      func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -&gt; CGFloat {
          return 60
      }
  
      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&gt; UITableViewCell {
          let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! TableCell
          cell.layoutIfNeeded()
          return cell
      }
  }
  </code></pre>
  
  <p>And cell in second table</p>
  
  <pre><code>class TableCell: UITableViewCell {
      let label: UILabel = {
          let label = UILabel()
          label.numberOfLines =  0
          label.lineBreakMode = .byWordWrapping
          label.text = "Some text"
          label.textColor = UIColor.black
          label.sizeToFit()
          label.backgroundColor = UIColor.red
          return label
      }()
  
      override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
          super.init(style: style, reuseIdentifier: reuseIdentifier)
          backgroundColor = UIColor.yellow
          setupView()
      }
  
      required init?(coder aDecoder: NSCoder) {
          fatalError("init(coder:) has not been implemented")
      }
  
      func setupView(){
          addSubview(label)
          addConstraintsWithFormat("V:|-8-[v0]-8-|", views: label)
          addConstraintsWithFormat("H:|-5-[v0]-5-|", views: label)
      }
  }
  </code></pre>
  
  <p>This is the effect of my code
  <img src="https://i.stack.imgur.com/NFaO7.png" alt="Program result">
  <br>
  There is no second table so I create new class and use it in cell as new table view</p>
  
  <pre><code>class InnerTableView: UITableView {
      override var intrinsicContentSize: CGSize {
          return self.contentSize
      }
  }
  </code></pre>
  
  <p>And now table is show but size is too large
  <img src="https://i.stack.imgur.com/o2Wck.png" alt="Result of InnerTableView">
  <br>
  What can I do to show full second table without empty space at bottom of cell.</p>