我遇到过同样的问题; 它似乎只影响 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。
我的切换相机图像如下所示:(
很难看到,它是白色的!右键单击或拖动它以查看它...)