title: UITableViewCell contentView insets and Auto Layout
body: <p>My problem is, that I want to inset the cell's contentView by 10 for each top, bottom, left, right. I want to use this space as a separator and disable the default table view separator. It looks like this without the insets:</p>
  
  <p><a href="https://i.stack.imgur.com/Tvpgp.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Tvpgp.jpg" alt="without separation"></a></p>
  
  <p>Now there are two issues:</p>
  
  <ol>
  <li>Issue: Ambiguous height constraints (in the view debugger) </li>
  <li>No separator</li>
  </ol>
  
  <p>1.</p>
  
  <p><a href="https://i.stack.imgur.com/eHpWB.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/eHpWB.png" alt="ambiguous height constraints"></a></p>
  
  <ol start="2">
  <li><p>I can change this by overriding layoutSubviews for my table view cell:</p>
  
  <pre><code>override func layoutSubviews() {
     super.layoutSubviews()
  
     let contentViewFrame = self.contentView.frame
     let insetContentViewFrame = contentViewFrame.inset(by: UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10))
     self.contentView.frame = insetContentViewFrame
     self.selectedBackgroundView?.frame = insetContentViewFrame
  }
  </code></pre></li>
  </ol>
  
  <p>However this causes issue number 3:</p>
  
  <p><a href="https://i.stack.imgur.com/0EqYG.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/0EqYG.jpg" alt="issue no 3"></a></p>
  
  <p>Now the description label has issues:</p>
  
  <p>Here is my Table View Cell (which uses autolayout so the labels define the cell height):</p>
  
  <pre><code>class NewsTableViewCell : UITableViewCell {
  
  public private(set) var titleLabel: UILabel!
  public private(set) var descriptionLabel: UILabel!
  
  override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
      super.init(style: style, reuseIdentifier: reuseIdentifier)
  
      self.tintColor = UIColor.white
  
      self.contentView.backgroundColor = UIColor.barTintColor
      self.contentView.layer.masksToBounds = false
      self.contentView.layer.cornerRadius = 10.0
  
      self.backgroundColor = UIColor.clear
  
      let layoutGuide = self.contentView.layoutMarginsGuide
  
      self.titleLabel = UILabel(frame: .zero)
      self.titleLabel.numberOfLines = 0
      self.titleLabel.font = UIFont.preferredFont(forTextStyle: .headline)
      self.titleLabel.textColor = UIColor.white
      self.titleLabel.adjustsFontSizeToFitWidth = false
      self.titleLabel.translatesAutoresizingMaskIntoConstraints = false
      self.titleLabel.textAlignment = .left
      self.contentView.addSubview(self.titleLabel)
  
      self.titleLabel.setContentCompressionResistancePriority(.required, for: .vertical)
  
      self.titleLabel.leadingAnchor.constraint(equalTo: layoutGuide.leadingAnchor).isActive = true
      self.titleLabel.trailingAnchor.constraint(equalTo: layoutGuide.trailingAnchor).isActive = true
      self.titleLabel.topAnchor.constraint(equalTo: layoutGuide.topAnchor).isActive = true
  
      self.descriptionLabel = UILabel(frame: .zero)
      self.descriptionLabel.numberOfLines = 0
      self.descriptionLabel.font = UIFont.preferredFont(forTextStyle: .subheadline)
      self.descriptionLabel.textColor = UIColor.lightGray
      self.descriptionLabel.adjustsFontSizeToFitWidth = false
      self.descriptionLabel.translatesAutoresizingMaskIntoConstraints = false
      self.descriptionLabel.textAlignment = .left
      self.contentView.addSubview(self.descriptionLabel)
  
      self.descriptionLabel.setContentCompressionResistancePriority(.required, for: .vertical)
  
      self.descriptionLabel.leadingAnchor.constraint(equalTo: layoutGuide.leadingAnchor).isActive = true
      self.descriptionLabel.trailingAnchor.constraint(equalTo: layoutGuide.trailingAnchor).isActive = true
      self.descriptionLabel.topAnchor.constraint(equalTo: self.titleLabel.bottomAnchor, constant: 5.0).isActive = true
      self.descriptionLabel.bottomAnchor.constraint(equalTo: layoutGuide.bottomAnchor).isActive = true
  
      let selectedView: UIView = UIView(frame: .zero)
      selectedView.backgroundColor = UIColor.gray
      selectedView.layer.cornerRadius = 10.0
      selectedView.layer.masksToBounds = false
      self.selectedBackgroundView = selectedView
  }
  </code></pre>
  
  <p>That is my table view controller code:</p>
  
  <pre><code>self.tableView.rowHeight = UITableView.automaticDimension
  self.tableView.estimatedRowHeight = 200.0
  self.tableView.register(NewsTableViewCell.self, forCellReuseIdentifier: "NewsCell")
  self.tableView.separatorStyle = .none
  </code></pre>
  
  <p>Is there any way I can both inset my contentView and have dynamically sizing labels (that define the cell height)?
  Thanks!</p>