I have a UITableViewController , that is embedded in a UITabBarController and also managed by a UINavigationController .

The only place that I have been able to customize the UITableViewController's table view frame is in viewDidAppear :

- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:YES]; [self customizeTableViewAppearance]; }

Here is the customizeTableViewAppearance method:

- (void)customizeTableViewAppearance { self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0); if([UIScreen mainScreen].bounds.size.height == 568) { [self.tableView setFrame:CGRectMake(0, 60, 320, 460)]; } else { [self.tableView setFrame:CGRectMake(0, 60, 320, 370)]; } }

This works perfectly when first using the app, but if you go to the device's home screen, and then resume using the app again, none of the usual view methods are called and the table view has been moved. So for whatever reason, even though view methods are not called, UITableViewController is changing the custom frame that I have set for it's UITableView .

Sure enough, if I move to a different tab, and then revisit the tab again, the view methods are called and the UITableView's frame is correct again.