I've resolved the issue. First of all, I should say that my VC is always rotated to portrait after MailComposeVC is dismissed regardless of the current device orientation and its state before showing a mail...
And the only VC method that gets called during auto rotation when MailComposeVC is on screen is viewWillLayoutSubviews/viewDidLayoutSubviews
. (willAnimateRotationToInterfaceOrientation
is not called!)
So, I reset the navigation bar to recover its height and call my custom layout method if my VC is invisible, like that:
(void) viewDidLayoutSubviews {
// HACK: forcing the bars to refresh themselves - this helps to get the shorter version when switching to landscape and the taller one when going back!!!
if (amIhidden) {
[self.navigationController setNavigationBarHidden:YES animated:NO];
[self.navigationController setNavigationBarHidden:NO animated:NO];
UIInterfaceOrientation currentOrientation = [[UIApplication sharedApplication] statusBarOrientation];
[self layoutForInterfaceOrientation:currentOrientation];
}
}
amIhidden BOOL
is set when presenting MailComposeViewController, as following:
UIActivityViewController *activityViewController = [[UIActivityViewController alloc]
initWithActivityItems:@[self]
applicationActivities:nil];
amIhidden = YES;
[activityViewController setCompletionHandler:^(NSString *activityType, BOOL completed){
amIhidden = NO;
}];
[self presentViewController:activityViewController animated:YES completion:nil];
Hope, my solution will help to somebody else!