pruébalo:
CATransition *transition = [CATransition animation];
transition.duration = kAnimationDuration;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromTop;
transition.delegate = self;
[self.navigationController.view.layer addAnimation:transition forKey:nil];
self.navigationController.navigationBarHidden = NO;
[self.navigationController pushViewController:tableViewController animated:YES];
funcionó muy bien para mí.
Fuente: http://www.iphonedevsdk.com/forum/iphone-sdk-development/25045-navigation-controller-custom-animation.html
Además, este: http://dmunsie.wordpress.com/2009/08/07/custom-animations-between-uiviewcontrollers/ – tobyc
imposible leer ese sitio. Casi letras negras sobre fondo negro. – SpaceDog
Tuve que cambiar 'animated' a' NO'; de lo contrario, estaba picado y en mal estado. –