// Option 1 - For portrait orientation only override func viewDidLoad() { super.viewDidLoad() tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 160.0 } // Option 2 - For both portrait and landscape orientations override func viewDidLoad() { super.viewDidLoad() tableView.rowHeight = UITableViewAutomaticDimension } func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { if isLandscapeOrientation() { return hasImageAtIndexPath(indexPath) ? 140.0 : 120.0 } else { return hasImageAtIndexPath(indexPath) ? 235.0 : 155.0 } }