我正在开发一个完全以横向模式运行的应用程序(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)
但显然做这样的手动调整并不理想。
有什么想法吗?
答案 0 :(得分:1)
我不知道这对您的情况是否有帮助,但请确保您的所有视图和控件都支持自动旋转。 UINavigationController没有,UITabBarController也没有。如果Tab Bar控制器中的任何子视图不支持自动旋转,则它将停止支持它。我必须创建自己的UINavigationController并使其继承自UINavigationController,然后实现自动旋转。由于您完全在横向上完成应用程序,我不知道这是否有帮助,但它可能会让您开始寻找解决方案的路径。
答案 1 :(得分:0)
我遇到了与MapView类似的问题。基本上,您必须确保所有子视图都实现:
view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
答案 2 :(得分:0)
因为MainScreen始终是肖像。见Height and width on iPhone (/iPad)