3

我有一个针对 iPhone 的应用程序。这UIImagePickerController在 iPhone 上运行良好,但是当我在 iOS 7 上使用 iPad Mini 打开它时,顶部UIImagePickerController被隐藏,隐藏了前置/后置摄像头切换按钮。我该如何解决这个问题?

更新:我通过子视图层次结构观察到“CAMFlipButton”有错误的框架:

<CAMFlipButton: 0x176e6250; baseClass = UIButton; frame = (310.5 9.5; 48 70); opaque = NO; layer = <CALayer: 0x176e63c0>>

它显示为这样

4

1 回答 1

0

我遇到过同样的问题; 它似乎只影响 iOS 7 和 8 上的 iPad Mini(但只影响非视网膜版本)。不知道为什么没有多少人遇到这个问题,但我找不到有效的解决方案或解决方法。
所以我所做的(我被黑了!)是我检测到这种情况何时发生(当按钮最终超出窗口边界时),并通过将按钮移回窗口并将我自己的图像添加到按钮来纠正它。

@interface MyImagePickerController : UIImagePickerController
@end

@implementation MyImagePickerController

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    showFlipButtonInSubviews(self.view);
}

void showFlipButtonInSubviews(UIView *view) {
    if ([[[view class] description] isEqualToString:@"CAMFlipButton"]) {
        if (view.x + view.width > UIScreen.mainScreen.bounds.size.width + 5) {
            // Fixes this: http://stackoverflow.com/questions/20895993/using-uiimagepickercontroller-in-ipad-mini-ios-7
            // Happens on iPad Mini non-retina only
            view.x = UIScreen.mainScreen.bounds.size.width - view.width - 10;
            UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 23, 16)];
            imageView.image = [UIImage imageNamed:@"switch-camera"];
            [view addSubview:imageView];
        }
    } else {
        for (UIView *subview in [view subviews]) {
            showFlipButtonInSubviews(subview);
        }
    }
}

@end

你为什么UIScreen.mainScreen.bounds.size.width + 5问?仅仅是因为在 iPad Mini 视网膜上,该按钮在窗口外有 4 个像素,但它仍然正确显示,所以我不想应用这个 hack。

我的切换相机图像如下所示:(
切换相机
很难看到,它是白色的!右键单击或拖动它以查看它...)

于 2015-05-01T13:04:22.517 回答