iOS模态popover在景观定位bug?

时间:2010-12-16 03:18:18

标签: ios modal-dialog landscape modalviewcontroller ios-4.2

我从横向呈现模态视图时遇到了奇怪的问题。只需从新的基于视图的应用程序开始并执行以下操作即可重新创建该问题:

  1. 创建一个将要呈现的新UIViewController子类。我命名为ModalViewController。更改视图背景颜色以使错误更明显。

  2. 两个控制器中的
  3. return YES; shouldAutorotateToInterfaceOrientation:

  4. 在主视图中添加IBAction以显示模式并将此操作挂钩到主视图控制器中的按钮。

    - (IBAction)showModal {  
      ModalViewController *vc = [[ModalViewController alloc] initWithNibName:@"ModalViewController" bundle:nil];  
      [self presentModalViewController:vc animated:NO];  
      [vc release];  
    }
    
  5. 现在,当您从横向模式中单击按钮时,您应该会看到问题。整个视图向上和向左移动。

    是否有其他人遇到此问题或有任何变通办法?我在iPad上遇到了类似的问题。

    alt text

3 个答案:

答案 0 :(得分:1)

注意到视图在viewDidAppear中有正确的框架并且稍后被搞砸后我最终通过在ModalViewController中实现以下内容来解决此问题。这假定CGRect实例变量名为frame_

- (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_];
}

我想说这是一个错误。

答案 1 :(得分:0)

  [self presentModalViewController:vc animated:YES];  

尝试启用动画,而不是禁用动画。

答案 2 :(得分:0)

您使用的是什么autoresizing mask? (您将在XIB文件中进行设置。)看起来它没有附加到屏幕的右侧。

另外,您的视图是否考虑了状态栏的大小? (我注意到底部的间隙看起来与状态栏非常相似。)

您可以通过按视图标题栏上的箭头在Interface Builder中模拟大量此操作。