Here is how I made this work, which is a mixture of Sam Ho and Marcel W's answers, and some of my own bug fixes made to my crappy code. I was using a UITableViewController. The table now resizes correctly when the keyboard is shown.
1) In viewDidLoad
I added:
self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
2) I had forgotten to call the super
equivalents in viewWillAppear
and awakeFromNib
. I added these back in.