Представление контроллера модального представления скрывает панель навигации

У меня есть приложение на основе навигации с панелью навигации, но есть несколько случаев, когда вместо того, чтобы помещать контроллер представления в стек, мне нужно представить контроллер представления модально. Проблема в том, что когда я отключаю контроллер модального представления, все работает так, как ожидалось, за исключением того, что панель навигации скрыта и размер (родительского представления) был изменен, что является ожидаемым поведением в соответствии с документами. Поэтому я решил, что могу просто вызвать встроенный метод, чтобы отобразить панель навигации. Я уже пробовал

[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];
    }
}
17
задан DGund 21 June 2012 в 02:21
поделиться