I've created a UIAlertController
with the preferred style of UIAlertControllerStyleAlert
. The alert shows when the leftBarButtonItem
is tapped. I created a UIBarButtonItem
property called backButton
and set the leftBarButtonItem = self.backButton
. This is working as designed. I'm not using storyboards.
The problem is that the leftBarButtonItem
moves down (my guess: about 20pts) when the alert shows. Why is this happening?
I know how to show/hide the button so the user can't see that the button when it has moved down. However, that sucks. Why is it happening in the first place?
I haven't found any similar issues online.
@property (strong, nonatomic) IBOutlet UIBarButtonItem *backButton;
in viewDidLoad:
self.backButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonPressed)];
[self.backButton setImage:[UIImage imageNamed:@"back-arrow-grey"]];
self.navigationItem.leftBarButtonItem = self.backButton;
in backButtonPressed:
{
self.navigationItem.leftBarButtonItem = nil; //to hide backButton because it moves down
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"My title" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *actionLeave = [UIAlertAction actionWithTitle:@"Leave" style:UIAlertActionStyleDefault handler:...//which works correctly
UIAlertAction *actionCancel = [UIAlertAction actionWithTitle:@"Go back" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
self.navigationItem.leftBarButtonItem = self.backButton; //to show backButton again now that the alert is dismissed
//other things happen here that work as designed
}];
[alertController addAction:actionLeave];
[alertController addAction:actionCancel];
[self presentViewController:alertController animated:YES completion:^{}];
}