I found the easiest way to make sure the whole cell is visible is to ask tableview to make sure the rectangle for the cell is visible:
[tableView scrollRectToVisible:[tableView rectForRowAtIndexPath:indexPath] animated:YES];
An easy way to check this is simply to put it in -(void)tableView:didSelectRowAtIndexPath: - clicking on any cell will scroll it in place if it is partially hidden.
Nico tewinkel
source share