   }
 
   override func tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {
-    if section == Section.description.rawValue {
-      return estimadedDescriptionSectionHeight
+    if let mainSectionHeader = mainSectionHeader, section == Section.description.rawValue {
+      let labelPreferredMaxLayoutWidth = tableView.frame.size.width - (2 * padding)
+      mainSectionHeaderDescriptionLabel?.preferredMaxLayoutWidth = labelPreferredMaxLayoutWidth
+      mainSectionHeaderTitleLabel?.preferredMaxLayoutWidth = labelPreferredMaxLayoutWidth
+      let targetSize = CGSize(width: tableView.frame.size.width,
+                              height: estimadedDescriptionSectionHeight)
+      return mainSectionHeader.systemLayoutSizeFitting(targetSize).height
     }
     return estimadedAdditionalExamplesSectionHeight
   }

class MDCNodeListViewController: CBCNodeListViewController {
  let appBar = MDCAppBar()
  var mainSectionHeader : UIView?
  var additionalExamplesSectionHeader : UIView?
  let sectionNames = ["Description", "Additional Examples"]
  let estimadedDescriptionSectionHeight = CGFloat(100)

    sectionTitleLabel.text = sectionNames[0]
    sectionTitleLabel.numberOfLines = 0
    sectionTitleLabel.setContentCompressionResistancePriority(1000, for: .vertical)
    mainSectionHeaderTitleLabel = sectionTitleLabel

    let descriptionLabel = UILabel()
    descriptionLabel.font = MDCTypography.body1Font()
