У меня есть приложение на основе навигации с панелью навигации, но есть несколько случаев, когда вместо того, чтобы помещать контроллер представления в стек, мне нужно представить контроллер представления модально. Проблема в том, что когда я отключаю контроллер модального представления, все работает так, как ожидалось, за исключением того, что панель навигации скрыта и размер (родительского представления) был изменен, что является ожидаемым поведением в соответствии с документами. Поэтому я решил, что могу просто вызвать встроенный метод, чтобы отобразить панель навигации. Я уже пробовал
[self.navigationController setNavigationBarHidden:NO];
, а также анимированную версию безуспешно.
В документации об этом говорится в методе
presentModalViewController: animated:
в разделе обсуждения, где говорится:
На устройствах iPhone и iPod touch вид of modalViewController всегда отображается в полноэкранном режиме "и" Устанавливает свойство modalViewController для указанного контроллера представления. Изменяет размер своего представления и присоединяет его к иерархии представлений. "Однако документы не подсказали мне, как отменить этот процесс после закрытия модального представления.
Кто-нибудь еще испытал это и нашел решение?
] Изменить: у меня такая же проблема, поэтому вместо того, чтобы задавать свой вопрос, я спонсирую вознаграждение за это. Это моя конкретная ситуация:
В моем случае я представляю средство выбора изображений в контроллере модального представления , через контроллер навигации:
-(void) chooseImage {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
imagepicker = [[UIImagePickerController alloc] init];
imagepicker.allowsEditing = NO;
imagepicker.delegate = self;
imagepicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagepicker.navigationBar.opaque = true;
imagepicker.wantsFullScreenLayout = NO;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
if (self.view.window != nil) {
popoverController = [[UIPopoverController alloc] initWithContentViewController:imagepicker];
[popoverController presentPopoverFromBarButtonItem:reset permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
} else {}
} else {
[self.navigationController presentModalViewController:imagepicker animated:YES];
}
}
}
-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[self.popoverController dismissPopoverAnimated:true];
} else {
[self.navigationController dismissModalViewControllerAnimated:YES];
}
//Save the image
}
-(void) imagePickerControllerDidCancel:(UIImagePickerController *)picker {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[self.popoverController dismissPopoverAnimated:true];
} else {
[self.navigationController dismissModalViewControllerAnimated:YES];
}
}