UINavigationController's documentation contains no pushViewController
methods with a completion:
parameter.
The better solution would be wrapping the push animation by an CATransaction and set the completionBlock. There's no need to deal with timings.
[CATransaction begin];
[CATransaction setCompletionBlock:^{
//whatever you want to do after the push
}];
[[self navigationController] pushViewController:viewController animated:YES];
[CATransaction commit];