更改通过 UIPopOver (iPad) 呈现的 UIImagePicker 的大小
Posted
技术标签:
【中文标题】更改通过 UIPopOver (iPad) 呈现的 UIImagePicker 的大小【英文标题】:Changing size of UIImagePicker presented via UIPopOver (iPad) 【发布时间】:2011-12-07 15:39:16 【问题描述】:我正在尝试更改通过 UIPopOver 呈现的 UIImagePicker 的大小。代码如下所示。问题是 PopOver 大小无法正确显示 - 它会以正确的大小短暂闪烁,然后动画到通常的默认大小。
谁能告诉我如何更改弹出框的大小?
- (void)showImagePickerForPhotoLibrary
NSLog(@"Picker");
imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.delegate = self;
imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePickerController.contentSizeForViewInPopover = CGSizeMake(768, 1000);
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
Class cls = NSClassFromString(@"UIPopoverController");
if (cls != nil)
popoverController = [[UIPopoverController alloc] initWithContentViewController:imagePickerController];
//popoverController.popoverContentSize = CGSizeMake(768, 1000);
[popoverController presentPopoverFromRect:selectedRect inView:self.view permittedArrowDirections:4 animated:YES];
else
[app.mainViewController presentModalViewController:imagePickerController animated:YES];
【问题讨论】:
【参考方案1】:我不确定这是最优雅的解决方案,但它似乎对我来说很好:
您可以将 UIImagePickerController 的视图嵌入到“容器”UIViewController 的视图中。
- (void)showImagePickerForPhotoLibrary
NSLog(@"Picker");
imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.delegate = self;
imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
UIViewController *containerController = [[UIViewController alloc] init];
containerController.contentSizeForViewInPopover = CGSizeMake(768, 1000);
[containerController.view addSubview:imagePickerController.view];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
Class cls = NSClassFromString(@"UIPopoverController");
if (cls != nil)
popoverController = [[UIPopoverController alloc] initWithContentViewController:containerController];
[popoverController presentPopoverFromRect:selectedRect inView:self.view permittedArrowDirections:4 animated:YES];
[imagePickerController.view setFrame:containerController.view.frame];
else
[app.mainViewController presentModalViewController:containerController animated:YES];
希望对你有帮助
编辑:出于某种奇怪的原因,框架在横向时确实发生了变化。
要解决这个问题,您需要在呈现弹出框后设置图像选择器的视图框架。
我已经编辑了上面的代码来显示这一点。
另外,在您的控制器中,添加以下内容:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
[imagePickerController.view setFrame:imagePickerController.view.superview.frame];
【讨论】:
谢谢。无论如何我可以得到iPad的宽度和高度为containerController.contentSizeForViewInPopover = CGSizeMake(768, 1000); ? ipad 分辨率为 768x1024。如果您希望弹出框占据整个屏幕,请尝试 CGSizeMake(self.view.frame.size.width,self.view.frame.size.height) 这种工作,但会导致另一个(奇怪的)错误:***.com/questions/8422636/…【参考方案2】:当我尝试 Mutix 的解决方案时,弹出框只显示带有空白视图的导航栏。
我的解决方法是将 imagePickerController 添加为 containerController 的子项,而不仅仅是添加选择器的视图。
主要是替换这一行的意思:
[containerController.view addSubview:imagePickerController.view];
这些行:
[containerController addChildViewController:imagePickerController];
[containerController.view addSubview:imagePickerController.view];
[imagePickerController didMoveToParentViewController:containerController];
另外,在使用这种方式时,我不需要对横向模式进行任何特殊处理。
【讨论】:
以上是关于更改通过 UIPopOver (iPad) 呈现的 UIImagePicker 的大小的主要内容,如果未能解决你的问题,请参考以下文章
点击 UITextField iPad 后 UIPopover 中的 datePicker
单击并打开 ipad 的相机时出现 uipopover 问题