【问题标题】:How to change the size width of UIImagePickerController on iPad?如何在 iPad 上更改 UIImagePickerController 的大小宽度?
【发布时间】:2012-11-25 20:04:14
【问题描述】:

如何在iPad上更改UIImagePickerController的大小宽度?我可以改变高度,所以它是 700,但不能改变宽度,它仍然是 320。 我的代码。

 UIImagePickerController*  imagePicker=[[UIImagePickerController alloc]init];
 imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
 imagePicker.delegate=self;
 CGRect myRect = CGRectMake(imagePicker.view.frame.origin.x, imagePicker.view.frame.origin.y, 720, 700);
 imagePicker.view.frame = myRect;
 self.popover = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
 myRect = CGRectMake(100, 880, 900, 900);
 CGRect re2 = CGRectMake(0,0,800,800);
 [self.popover setPopoverContentSize:re2.size];
 [self.popover presentPopoverFromRect:[self.view bounds] inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
 [self.popover presentPopoverFromRect:myRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];      
 [self.popover setPopoverContentSize:re2.size];

【问题讨论】:

  • 你为什么要从 2 个不同的矩形中显示两次弹出框?另外,imagePicker 的 frame 不需要设置,因为它是 popover 的内容视图控制器,它的大小会在你设置 popover contentSize 时设置。

标签: objective-c ios ipad uiimagepickercontroller uipopovercontroller


【解决方案1】:

iOS 9 及更高版本。

另一种方法是使用ContainerViewController,并将UImagePickerViewController 添加到ContainerViewController。 UINavigationControllerDelegate 方法中的覆盖大小有其限制。 (低于 600pt 的高度不能下降)

    _imagePicker                      = [[UIImagePickerController alloc] init];
    _imagePicker.delegate             = self;
    _imagePicker.sourceType           = UIImagePickerControllerSourceTypeCamera;
    _imagePicker.preferredContentSize = CGSizeMake(320, 480);

    UIViewController *containerViewController    = [[UIViewController alloc] init];
    containerViewController.preferredContentSize = _imagePicker.preferredContentSize;
    [containerViewController addChildViewController:_imagePicker];
    [containerViewController.view addSubview:_imagePicker.view];
    [_imagePicker didMoveToParentViewController:containerViewController];

    if (!_imagePickerPopover) {
        //customize PopoverController, use your own
        _imagePickerPopover = [[PopoverController alloc] init:cnt];
    }

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我用 UINavigationControllerDelegate 解决了,因为 PhotoLibrary 的 UIImagePickerView 内容是一个 navigatorController。当您选择一行时,它会更改 ViewController 并且弹出框的大小也会更改。 所以,在你的 willShowViewController 委托中放:

    - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
        viewController.contentSizeForViewInPopover = CGSizeMake(800, 800);
    }
    

    这将阻止调整弹出框的大小。

    【讨论】:

    • 嗨。我用你的代码来解决调整大小的问题。解决了。但是现在当我尝试选择图像时,它的标签位置错位了。当我在其右侧点击一个图像时,下一个图像被录制并选择。请帮忙..
    【解决方案3】:

    这个简化的代码对我来说很好用:

        UIImagePickerController*  imagePicker=[[UIImagePickerController alloc]init];
        imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        self.popover = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
        [self.popover presentPopoverFromRect:CGRectMake(100, 880, 1, 1) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
        [self.popover setPopoverContentSize:CGSizeMake(700, 700)];
    

    【讨论】:

    • 问题好像是,一选择一行,size就变回320,就好像imagePicker是为iPhone设计的一样。
    • @Srikanth,您应该编辑您的问题以添加这一事实——这与您发布的问题不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    相关资源
    最近更新 更多