Resizing UITableView to fit content
// Swift 5 and 4.2 solution without KVO, DispatchQueue, or setting constraints yourself. // This solution is based on Gulz's answer. // 1) Create a subclass of UITableView: import UIKit final class ContentSizedTableView: UITableView { override var contentSize:CGSize { didSet { invalidateIntrinsicContentSize() } } override var intrinsicContentSize: CGSize { layoutIfNeeded() return CGSize(width: UIView.noIntrinsicMetric, height: contentSize.height) } } // 2) Add a UITableView to your layout and set constraints on all sides. Set the class of it to ContentSizedTableView. // 3) You should see some errors, because Storyboard doesn't take our subclass' intrinsicContentSize into account. Fix this by opening the size inspector and overriding the intrinsicContentSize to a placeholder value. This is an override for design time. At runtime it will use the override in our ContentSizedTableView class