Instead of adjusting the frame of the Table View simply work with the contentInset property. This is how UITableViewController does its job.
Short Code Review if you don't mind: (I only want to help - not to be a jerk)
Line 35: Please remove your -init override. You are doing nothing there and if you want to have custom initialization use initWithCoder: and initWithFrame: instead of init
Line 61: id (star)appDelegate = [[UIApplication sharedApplication] delegate];
Please remove the "(star)"
Line 64: CGRect windowRect = appDelegate.window.bounds;
You are trying to get the window bounds. Why are you not using: CGRect windowRect = self.window.bounds;
Line 73: viewRectAbsolute = FixOriginRotation(viewRectAbsolute, orientation, windowRect.size.width, windowRect.size.height);
Are you aware of: CGRectGetHeight(…) and CGRectGetWidth(…)? I am not saying you should use these functions instead but you could consider using them. I like them very much:
viewRectAbsolute = FixOriginRotation(viewRectAbsolute, orientation, CGRectGetWidth(windowRect), CGRectGetHeight(windowRect));
Line 79: int remainder = (viewRectAbsolute.origin.y + viewRectAbsolute.size.height + keyboardFrame.size.height) - windowRect.size.height;
Again: Consider the functions mentioned above. More importantly replace "int" with "NSInteger" - or even better with CGFloat.
Line 80: if (remainder > 0 && !(remainder > frame.size.height + 50)) {
When using CGFloat you want to make sure to use 0.0 and 50.0.
Line 82: float duration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
Why are you assigning the result of -doubleValue to a float?