iOS 模式弹出框横向定位错误?
Posted
技术标签:
【中文标题】iOS 模式弹出框横向定位错误?【英文标题】:iOS modal popover in landscape positioning bug? 【发布时间】:2010-12-16 03:18:18 【问题描述】:我在横向呈现模态视图时遇到了奇怪的问题。只需从新的基于视图的应用程序开始并执行以下操作,即可重现该问题:
创建一个新的UIViewController
子类,该子类将被呈现。我将我的命名为ModalViewController
。更改视图背景颜色以使错误更加明显。
return YES;
在两个控制器中shouldAutorotateToInterfaceOrientation:
将IBAction
添加到您的主视图以显示模式并将此操作连接到您的主视图控制器中的按钮。
- (IBAction)showModal
ModalViewController *vc = [[ModalViewController alloc] initWithNibName:@"ModalViewController" bundle:nil];
[self presentModalViewController:vc animated:NO];
[vc release];
现在,当您从横向模式单击按钮时,您应该会看到问题。整个视图向上和向左移动。
还有其他人遇到此问题或有任何解决方法吗?我在 iPad 上遇到了类似的问题。
【问题讨论】:
【参考方案1】:在注意到 viewDidAppear
中的视图具有正确的框架并且后来被搞砸后,我最终通过在 ModalViewController
中实现以下内容来解决此问题。这假定有一个名为 frame_
的 CGRect
实例变量。
- (void)viewDidAppear:(BOOL)animated
[super viewDidAppear:animated];
frame_ = [[self view] frame];
[self performSelector:@selector(fixFrame) withObject:nil afterDelay:0];
- (void)fixFrame
[[self view] setFrame:frame_];
我会说这是一个错误。
【讨论】:
【参考方案2】: [self presentModalViewController:vc animated:YES];
请尝试启用动画,而不是禁用动画。
【讨论】:
修复了框架,但不幸的是并没有解决我的问题。我在模态 viewDidAppear 中做一些自定义动画,如果模态动画进入,这些动画会延迟很多。【参考方案3】:你用的是什么autoresizing mask? (您将在 XIB 文件中进行设置。)看起来它没有附加到屏幕的右侧。
另外,您的视图是否考虑了状态栏的大小? (我注意到底部的间隙看起来与状态栏的大小非常相似。)
您可以在 Interface Builder 中通过按视图标题栏上的箭头来模拟很多这种情况。
【讨论】:
在界面生成器中,一切似乎都运行良好(使用小箭头)。用我的下载自己试试。该视图具有视图的标准自动调整大小掩码 - 界面生成器中的所有内容均为红色。如果在模态显示后旋转到横向,它也可以正常工作。以上是关于iOS 模式弹出框横向定位错误?的主要内容,如果未能解决你的问题,请参考以下文章