崩溃的iPad照片select器

我正在使用以下function激活设备相机或图像select器,具体取决于UIActionSheet的结果。 如果fromCamera = YES,则可以在iPhone和iPad上使用。 如果fromCamera = NO,那么它在iPhone上工作,图像select器出现。 但它在iPad上崩溃,出现以下错误: UIStatusBarStyleBlackTranslucent在此设备上不可用。 我已经知道iPad无法显示UIStatusBarStyleBlackTranslucent状态栏,但是如何避免这种崩溃?

-(void)addPhotoFromCamera:(BOOL)fromCamera{ if(fromCamera){ picker.sourceType = UIImagePickerControllerSourceTypeCamera; } else{ picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; } [self presentModalViewController:picker animated:YES]; 

}

我怀疑UIImagePicker从Info.plist文件或从当前显示的视图控制器inheritance半透明状态栏。

如果你的应用没有半透明的状态栏会发生什么?

如果您在iPad上将select器设置为UIImagePickerControllerSourceTypePhotoLibrary,那么您必须(!)将其显示在popoverview中,否则您会遇到exception。 我这样做,以最大限度地控制popover的大小(我认为标准尺寸太小):

 -(void)openPhotoPicker { imagePicker = [[UIImagePickerController alloc] init]; imagePicker.delegate = self; imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; imagePicker.navigationBar.opaque = true; //put the image picker in its own container controller, to control its size UIViewController *containerController = [[UIViewController alloc] init]; containerController.contentSizeForViewInPopover = rightPane.frame.size; [containerController.view addSubview:imagePicker.view]; //then, put the container controller in the popover popover = [[UIPopoverController alloc] initWithContentViewController:containerController]; //Actually, I would like to do the following, but iOS doesn't let me: //[rightPane addSubview:imagePicker.view]; //So, put the popover over my rightPane. You might want to change the parameters to suit your needs. [popover presentPopoverFromRect:CGRectMake(0.0, 0.0, 10.0,0.0) inView:rightPane permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; //There seems to be some nasty bug because of the added layer (the container controller), so you need to call this now and each time the view rotates (see below) [imagePicker.view setFrame:containerController.view.frame]; } 

我也有以下几个方面来对付一个轮转的bug:

 - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { if(imagePicker!=nil && rightPane.frame.size.width>0) [imagePicker.view setFrame:imagePicker.view.superview.frame]; } 

这是不完美的,但目前我的testing目的是可以的。 我考虑编写自己的Imagepicker,因为我不喜欢被迫使用popoverview …但是,这是一个不同的故事。