我的iPad应用程序使用“页面”演示样式打开模式视图控制器。如您所知,“页面”呈现样式不会覆盖呈现视图控制器的状态栏以指示页面呈现。
从模态视图控制器中,该应用程序将打开UIImagePickerController
以进行照片制作。UIImagePickerController
具有“全屏”演示样式。解散图像选择器后,显示的模态视图控制器会变高20px,并且与初始视图控制器的状态栏重叠。
我试图UIImagePickerController
用简单替换UINavigationController
它,它也破坏了我的模式视图控制器。
有屏幕截图:
恢复“页面”视图控制器大小的唯一方法是viewController.view.superview.superview.superview.superview
在返回“页面”视图控制器后更改框架的高度。但这真的很奇怪。
关闭嵌套的模态视图控制器后,还有另一种方法可以修复“页面”模态视图控制器的显示吗?
更新:我使用了这样奇怪的代码来解决我的问题:
#define STATUS_BAR_HEIGHT 20
#define IPAD_PORTRAIT_HEIGHT 1004
#define IPAD_LANDSCAPE_HEIGHT 748
UIView *superview = nil;
// In case of this view controller included in navigationController we have to use superview of navigation's controller view
if (self.navigationController)
superview = self.navigationController.view.superview;
else
superview = self.view.superview;
CGRect r = superview.frame;
// Sometimes we have to fix height + origin, sometimes only height (becase view has bottom magnifying)
// In landscape orientation we have to fix 'width' instead of 'height', because that view controller always works in 'portrait' mode
if (self.interfaceOrientation == UIInterfaceOrientationPortrait && r.size.height > IPAD_PORTRAIT_HEIGHT) {
r.origin.y = STATUS_BAR_HEIGHT;
r.size.height = IPAD_PORTRAIT_HEIGHT;
}
else if (self.interfaceOrientation == UIInterfaceOrientationMaskPortraitUpsideDown && r.size.height > IPAD_PORTRAIT_HEIGHT) {
r.size.height = IPAD_PORTRAIT_HEIGHT;
}
else if (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft && r.size.width > IPAD_LANDSCAPE_HEIGHT) {
r.size.width = IPAD_LANDSCAPE_HEIGHT;
r.origin.x = STATUS_BAR_HEIGHT;
}
else if (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight && r.size.width > IPAD_LANDSCAPE_HEIGHT) {
r.size.width = IPAD_LANDSCAPE_HEIGHT;
}
superview.frame = r;
我认为没有更好的解决方案。有什么想法如何改进吗?
UPDATE2:我刚刚打开一个错误。您可以在此处关注它:rdar:// 15949644
UPDATE3:有我的示例项目:链接
没有一个好的解决方案,这是一个Apple bug,在修复之前,您必须解决它。在iOS 7.1中尚未修复。我为此制定了一个解决方案,并意识到我也在实现相同的解决方案。很难看,但是可以用。
一句话就这个设计。我猜为什么Apple忽略了这个问题是因为全屏显示视图控制器并不是Apple可以做的。当然,这不是借口,有时除了呈现全屏之外,别无选择(例如,我们必须打开摄像机视图,例如,必须以全屏模式打开它)。也许您可以更改设计以适应Apple的错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句