【发布时间】:2010-01-30 03:32:57
【问题描述】:
我检查了其他答案,但没有找到任何能真正描述我的情况的东西。就这样吧。
我有一个基于窗口的应用程序,它从 xib 创建和加载 UIViewController。它禁用了状态栏,高度为 480,UISegmentedControl 的 y 原点为 451。它很好地显示在屏幕底部。*
在 UIViewController 的 viewDidLoad 中,我创建了一个 UIView initWithFrame:CGRectMake(0.0, 0.0, 320.0, 431.0)];(UISegmentedControl 为 480 - 29 像素,状态栏为 20。)我使用[self.view addSubview:gameBoard]; 将其添加到 UIViewController。然后添加一些 UIView 游戏片段作为游戏板 UIView 的子视图,一切都按照我认为应该的方式显示。
当点击其中一些 UIView 子视图时,应该会出现一个菜单。我创建了一个带有所需控件的 UIViewController。我使用委托方法从接收触发事件的子视图调用到根 UIViewController - 它确实
self.squadOrders = [[SquadOrders alloc] initWithNibName:@"SquadOrders" bundle:nil];
squadOrders.viewControllerDelegate = self;
[self presentModalViewController:squadOrders animated:YES];
模态对话框按我想的那样显示,从屏幕的下边缘向上滑动,不覆盖状态栏,而是覆盖根 UIViewController 底部提到的 UISegmentedControl。它被解雇了
[self dismissModalViewControllerAnimated:YES];
这就是麻烦的开始。 UISegmented 控件向下移动了 20 个像素,因此只有 9 个像素在屏幕底部可见。 视图被向下移动的顶部有一个 20 像素的白色间隙。
*在此或任何其他 xib 上启用状态栏根本不会改变所描述的行为。
其他相关的stackoverflow问题是:
IPhone - After dismissing Modal View Controller - gap is left at top of page - 但给定的解决方案是没有加载另一个视图控制器作为显示模式的视图控制器的子视图 - 但我没有,只有 UIViews。也有建议在modal消失后重新设置合适的frame,但感觉像是作弊。
Contents of UIScrollView shifted after dismissing ModalViewController - 我已经玩过所有视图和控制器的高度 - 确信它们匹配,没有帮助。同样,可以重置框架,但它只能解决症状。
还有其他的,但到目前为止还没有解决这个问题。
【问题讨论】:
-
在模态显示之前查看 self.view.frame,它是 0,0,320,480。当模态被解除时,它变为 0,20,320,460。希望对您有所帮助。
-
我不敢相信没有解决办法。
标签: iphone cocoa-touch iphone-sdk-3.0 uikit