UINavigationController自动旋转到横向不会更新UIView框架

时间:2009-04-23 11:46:28

标签: iphone cocoa cocoa-touch user-interface

我正在开发一个完全以横向模式运行的应用程序(UIStatusBarHidden = YES和UIInterfaceOrientation = UIInterfaceOrientationLandscapeRight)。我正在使用NavigationController,我的rootViewController(MainViewController)设置如下:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

在我的MainViewController中,我正在加载这样的视图:

- (void)loadView {
  CGRect frame = [[UIScreen mainScreen] applicationFrame]; // This returns a portrait frame
  MainView *view = [[MainView alloc] initWithFrame:frame];
  self.view = view;
  [view release];
}

然后在MainView中,我正在加载这样的子视图:

- (id)initWithFrame:(CGRect)frame {
  if (self = [super initWithFrame:frame]) {
    self.pdfView = [[PDFView alloc] initWithFrame:frame];
    [self addSubview:pdfView];
  }
   returnself;
}

我的问题是MainView在横向模式下正确呈现(尽管框架传递到[MainView initWithFrame:]是纵向),而子PDFView呈现为纵向框架。我还尝试在我的[UIView initWithFrame:]实现中应用变换,如下所示:

view.center = CGPointMake(view.frame.size.height/2.0, view.frame.size.width/2.0);
view.transform = CGAffineTransformRotate(view.transform, (M_PI/2.0));

但由于帧值不正确,这似乎不起作用。忽略框架并像这样手动创建框架似乎在某些情况下有效:

CGRectMake(0.0, 0.0, 480.0, 320.0)

但显然做这样的手动调整并不理想。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我不知道这对您的情况是否有帮助,但请确保您的所有视图和控件都支持自动旋转。 UINavigationController没有,UITabBarController也没有。如果Tab Bar控制器中的任何子视图不支持自动旋转,则它将停止支持它。我必须创建自己的UINavigationController并使其继承自UINavigationController,然后实现自动旋转。由于您完全在横向上完成应用程序,我不知道这是否有帮助,但它可能会让您开始寻找解决方案的路径。

答案 1 :(得分:0)

我遇到了与MapView类似的问题。基本上,您必须确保所有子视图都实现:

view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

答案 2 :(得分:0)

因为MainScreen始终是肖像。见Height and width on iPhone (/iPad)