Я бью головой о стену в течение большей части недели, пытаясь понять, что происходит с этой ошибкой, но я ничего не могу понять. Я прочитал все документы диспетчера представлений о материалах разработчика Apple, просмотрел бесчисленные статьи здесь и т. Д.UINavigationBar исчезает на presentViewController: анимированный: завершение
У меня есть 3 контроллера вида: контроллер базового представления, контроллер редактирования изображений (позволяет пользователю увеличивать масштаб в/панорамировать изображение и при нажатии «ОК» сохранить изображение в границах, вернуть изображение в базовый вид с помощью метода делегата и нажать его на последний контроллер представления) и, наконец, BigPictureViewController, где пользователь взаимодействует с изображением он спас.
При вызове presentViewController: анимированный: завершение с контроллера базового представления, панель навигации отображается в течение секунды секунды, а затем исчезает. Я полностью уничтожил конечный контроллер, так что он просто отображает пустой экран, идентичный тому, когда вы впервые создаете контроллер вида, но навигационная панель все еще исчезает, поэтому я знаю, что это не что-то в кодировке контроллера представления.
Вот делегат от контроллера редактирования изображений (содержащийся в контроллере базового вида):
#pragma mark - camera view delegate
-(void)cameraView:(CameraViewController *)camView didReturnWithEditedImage:(UIImage *)image
{
theImage = image;
BPVCFlag = YES;
[self.navigationController popViewControllerAnimated:YES];
}
Далее в методе viewWillAppear контроллера представления базового, я чек для флага для переключения SEGUE:
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (BPVCFlag)
{
BPVCFlag = NO;
BigPictureViewController *bpvc = [[BigPictureViewController alloc] init];
UIStoryboardSegue *seg = [[UIStoryboardSegue alloc] initWithIdentifier:@"pushitrealgood" source:self destination:bpvc];
[self prepareForSegue:seg sender:self];
}
}
Наконец, метод prepareForSegue:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSString *id = [segue identifier];
if ([id hasPrefix:@"pushit"]){
BigPictureViewController *bpvc = segue.destinationViewController;
bpvc.imageFromLibrary = theImage;
[self presentViewController:bpvc animated:YES completion:nil];
}
}
Я синтаксического дерева d представляя его от self.navigationController и т.д., и я могу заставить его придерживаться другого контроллера навигации, если я использую
UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:bpvc];
[self.navigationController presentViewController:navCon animated:YES completion:nil];
но, похоже, очень Hacky способ сделать это, и на самом деле не решить проблему, просто обходит ее.
Извините за стену с текстом, но я предпочел бы быть более тщательным, чем оставлять людей в темноте.
TL; DR на presentViewController, навигационная панель всплывает на долю секунды, а затем исчезает ~
Заранее спасибо за любую помощь/советы!
Вы представляя BigPictureViewController - это подкласс UINavigationController? – rdelmar
self.navigationController - это только ссылка, является объектом контроллера init раньше? – PRu