gpt4 book ai didi

ios - iPad/iOS7 : 'Page' modal view controller strange behaviour after presenting 'Full screen' view controller from it

转载 作者:可可西里 更新时间:2023-11-01 03:21:53 24 4
gpt4 key购买 nike

我的 iPad 应用程序以“页面”呈现样式打开模态视图 Controller 。如您所知,“页面”呈现样式不会覆盖呈现 View Controller 的状态栏以指示页面呈现。

Initial view controller

Page modal view controller

应用程序从模态视图 Controller 打开 UIImagePickerController 来制作照片。 UIImagePickerController 具有“全屏”呈现样式。关闭图像选择器后,呈现模态视图 Controller 的高度会增加 20px,并与初始 View Controller 的状态栏重叠。

我尝试用简单的 UINavigationController 替换 UIImagePickerController,它也破坏了我的模态视图 Controller 。

有截图: Full screen view controller

Broken modal view controller

他们恢复“页面” View Controller 大小的唯一方法是在返回“页面” View Controller 后更改 viewController.view.superview.superview.superview.superview 框架的高度。但这真的很奇怪。

在解除嵌套模态视图 Controller 后,是否有另一种方法来修复“页面”模态视图 Controller 呈现?

更新:我用了这么奇怪的代码来解决我的问题:

#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;

我不相信没有更优雅的解决方案。有什么改进的想法吗?

更新 2: 我刚刚打开了一个错误。你可以在那里关注它:rdar://15949644

更新 3: 我的示例项目:link

最佳答案

没有好的解决方案,这是一个 Apple 错误,在修复之前,您必须解决它。它在 iOS 7.1 中尚未修复。我为此制定了解决方案,并意识到我也在实现相同的解决方案。这很丑陋,但它确实有效。

关于这个设计的一句话。我猜 Apple 忽略这个问题的原因是因为全屏显示 View Controller 不是 Apple 会做的事情。这当然不是借口,有时除了全屏显示别无选择(例如,我们不得不打开一个摄像头 View ,必须全屏打开)。也许您可以更改设计以适应 Apple 的错误。

关于ios - iPad/iOS7 : 'Page' modal view controller strange behaviour after presenting 'Full screen' view controller from it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21146801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com