У меня есть приложение на основе навигации с навигационной панелью, но есть несколько примеров, где вместо того, чтобы нажимать контроллер представления на стек, мне нужно представить контроллер представления по модулю. Проблема в том, что когда я отклоняю контроллер модального представления, все работает так, как ожидалось, за исключением того, что панель навигации скрыта, а размер (родительский вид) изменен, что является ожидаемым поведением в соответствии с документами. Поэтому я решил, что могу просто вызвать встроенный метод, чтобы отобразить панель навигации. Я уже пробовал
[self.navigationController setNavigationBarHidden:NO];
а также анимированную версию без успеха.
В документации говорится об этом в методе
presentModalViewController: animated:
в разделе обсуждения, где сказано,
На устройствах iPhone и iPod touch представление modalViewController всегда отображается в полноэкранном режиме "и" Устанавливает свойство modalViewController указанному контроллеру представления. Изменяет размер его представления и привязывает его к иерархии представлений ". Однако документы не указали мне, как отменить этот процесс после отклонения модального представления.
Кто-нибудь еще испытал это и нашел решение?
Изменить: у меня такая же проблема, поэтому вместо того, чтобы задавать свой вопрос, я поддерживаю щедрость на этом. Это моя конкретная ситуация:
В моем случае я представляю Image Picker в Modal View Controller над контроллером навигации:
-(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];
}
}