Settings the height of rows for multiple screens within a TableViewController
I would split the table into multiple sections and set the number of rows to 0 for those sections I do not want to display and only use the default settings in heightForRowAtIndexPath

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -&gt; CGFloat {

    switch indexPath.section {
    // hide all cells of teh default methos table
    case 0: return 50.0
    case 1:
        if ((promptLabel.intrinsicContentSize().height * promptLabel.font.pointSize) &gt; 350){
            //print ("the result of this is:  ---------- \(promptLabel.intrinsicContentSize().height * promptLabel.font.pointSize)")
            return 80
        } else { return 50.0 }
    case 2: return 9.0
    case 3:
        if enableNotifications.on {
            return selectedCellHeight
        }
        return unselectedCellHeight
    case 4: return 9.0
    // hide propmt me to modify number cell
    case 5:
        if ((modifyNumbersLabel.intrinsicContentSize().height * modifyNumbersLabel.font.pointSize) &gt; 310){
            //print ("the result of this is:  ---------- \(modifyNumbersLabel.intrinsicContentSize().height * modifyNumbersLabel.font.pointSize)")
            return 90
        } else { return 50.0 }
    case 6: return 9.0
    case 7: return 50.0
    default: break
    }

return 50.0
}


And implement these functions:

override func numberOfSectionsInTableView(tableView: UITableView) -&gt; Int {
    return 8
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -&gt; Int {
    switch section {
    case 0: 
        // Original Rows 0, 1, 2
        switch walkthroughStep {
        case 1,2: return 0
        default: return 3
        } 
    case 1:
        // Original Row 3
        switch walkthroughStep {
        case 2: return 0
        default: return 1
        }  
    case 2:
        // Original Row 4
        switch walkthroughStep {
        case 2: return 0
        default: return 1
        }  
    case 3:
        // Original Rows 5
        switch walkthroughStep {
        case 2: return 0
        default: return 1
        }  
    case 4:
        // Original Row 6
        switch walkthroughStep {
        case 1: return 0
        default: return 1
        }  
    case 5:
        // Original Row 7
        switch walkthroughStep {
        case 1,2: return 0
        default: return 1
        } 
    case 6:
        // Original Row 8
        switch walkthroughStep {
        case 1,2: return 0
        default: return 1
        } 
    case 7:
        // Original Rows 9, 10, 11
        switch walkthroughStep {
        case 1,2: return 0
        default: return 5
        }  
     default:
         return 0
    } 


So most of the display logic is in the numberOfSectionsInTableView method.