Skip to content

How to Fix iOS UITableView Row Height Issues

DodaTech Updated 2026-06-24 2 min read

In this tutorial, you'll learn about How to Fix iOS UITableView Row Height Issues. We cover key concepts, practical examples, and best practices.

The Problem

UITableView cells are the wrong height:

Cells are too tall, too short, or overlapping.

or:

Automatic row height gives incorrect results.

Quick Fix

Step 1: Enable automatic row height

WRONG — fixed height:

self.tableView.rowHeight = 44.0;

RIGHT — use automatic sizing:

self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 100.0;  // Approximate estimate

Step 2: Set constraints correctly in the cell

Ensure content inside the cell has vertical constraints from top to bottom:

// In cell's contentView:
titleLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 8).isActive = true
titleLabel.bottomAnchor.constraint(equalTo: descriptionLabel.topAnchor, constant: -8).isActive = true
descriptionLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -8).isActive = true

Step 3: Implement heightForRow for dynamic heights

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 0) {
        return 100.0;
    }
    return UITableViewAutomaticDimension;
}

Step 4: Reload rows when content changes

[self.tableView beginUpdates];
[self.tableView endUpdates];  // Recalculates heights

Or reload specific rows:

[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

Step 5: Use sizeThatFits for manual calculation

override func sizeThatFits(_ size: CGSize) -> CGSize {
    let height = titleLabel.sizeThatFits(size).height +
                 descriptionLabel.sizeThatFits(size).height + 32
    return CGSize(width: size.width, height: height)
}

Prevention

  • Use UITableViewAutomaticDimension for variable height content.
  • Always set estimatedRowHeight for performance.
  • Ensure vertical constraints connect from top to bottom of the cell.

Common Mistakes with uitableview rowheight

  1. Overlapping type class instances that cause GHC to reject the program with ambiguous dispatch errors
  2. Non-exhaustive pattern matches that compile with warnings then crash at runtime
  3. Misunderstanding that String is [Char] with poor performance for large text operations

These mistakes appear frequently in real-world IOS code. DodaTech's contributors have identified these patterns through analysis of open-source projects and production systems.

Practice Exercise

Write a pure function that safely divides two integers using Maybe, then test it with edge cases like division by zero and negative numbers.

This exercise reinforces the concepts covered in this guide. Try implementing it before checking online solutions.

FAQ

### What is the difference between rowHeight and estimatedRowHeight?

rowHeight sets the exact height. estimatedRowHeight is a rough estimate for scrollbar calculation. When using automatic dimension, estimatedRowHeight is required.

Why do my cells have the wrong height after rotation?

Call tableView.reloadData() or tableView.beginUpdates()/endUpdates() in viewWillTransition(to:with:).

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro