【问题标题】:UIImagePicker can't perform full-screen transition on iOS 3.1.3UIImagePicker 无法在 iOS 3.1.3 上执行全屏转换
【发布时间】:2025-11-30 20:10:02
【问题描述】:

我正在修改我的 iphone 应用程序以使其向后兼容 iOS 3.1.3。我允许用户从照片库中加载图像。我使用以下代码展示图像选择器:

UIImagePickerController* content = [[UIImagePickerController alloc] init];
content.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
content.delegate = self;
[self presentModalViewController:content animated:YES];
[content release];

这在 ios 4.0+ 上可以正常工作。但是,在 ios 3.1.3 上,图像选择器永远不会出现,并且我收到以下警告:

Can't perform full-screen transition. The fromViewController's view must be 
within a view that occupies the full screen.

本例中的 fromViewController 是导航控制器中的可见视图控制器。导航控制器使用以下代码段在 appDelegate didFinishLaunchingWithOptions 中设置:

MyViewController* root = [[MyViewController alloc] initWithNibName:nil bundle:nil];
UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:root];
aNavigationController.delegate = self;    
[window addSubview:aNavigationController.view];

在尝试加载图像选择器之前,导航控制器中会显示另一个视图控制器。因此,在加载图像选择器时,导航堆栈中有两个视图控制器。

根据另一篇文章,我尝试使用根视图控制器和导航控制器作为 fromViewController(呈现图像选择器的控制器)。行为是相同的。

我想知道这个问题是否与导航控制器的 modalPresentationStyle 不能在 iOS 3.1.3 中设置的事实有关。对于 iOS 3.2+,我将演示样式设置为 UIModalPresentationFullScreen。我相信这是以前 iOS 的默认设置。但是,我之所以怀疑,仅仅是因为我收到的警告涉及全屏视图。

谁能提供其他建议?我找不到任何 Apple 文档来解决从 ios 3.x 到 4.0 对 UIImagePicker 或 UINavigationController 的更改。

提前致谢!

【问题讨论】:

    标签: iphone uiimagepickercontroller ios-3.x


    【解决方案1】:

    当视图控制器位于导航控制器内部时,我通常会做的是:

    imagePicker = [[UIImagePickerController alloc]init];
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    imagePicker.delegate = self;
    
    [self.navigationController presentModalViewController:imagePicker animated:YES];
    

    希望它对你有用!

    【讨论】:

    • 不走运。当我从导航控制器、根视图控制器或可见视图控制器呈现时,我会得到相同的行为。
    • @jenonen "在尝试加载图像选择器之前,导航控制器中显示了另一个视图控制器"您如何显示该视图控制器?
    • [self.navigationController pushViewController:newViewController animated:YES];
    • 在推送另一个模态视图控制器的同时呈现模态视图控制器可能是一件奇怪的事情。为什么不尝试等到第二个视图控制器被推送?
    • 它们不会同时发生。我推动第二个视图控制器,并从中呈现模态视图控制器。我遇到的一个问题是 iOS 3.1.3 无法指定 modalPresentationStyle。对于 iOS 3.2+,我将其设置为 UModalPresentationFullScreen,但对于之前的 iOS,它应该是全屏的。