[英]best method to support multiple orientations on iPAD with storyboards (no AutoLayout or AutoResizing)
我想在我的iPAD应用程序上支持横向和纵向方向,该应用程序使用故事板而不涉及iOS6+
上的Auto Layout
的复杂性以及iOS 5
及更早版本的Auto Resizing
(因为该应用程序将同时支持iOS 5和6,因此没有AutoLayout
是允许在这里),我认为解决方案的起点如下:
创建两个单独的故事板: MainStoryboard-Portrait
& MainStoryboard-Landscape
,当前视图控制器(让我们将它命名为FirstViewController)是纵向的,并且用户将设备旋转为横向,我从MainStoryboard-Landscape
storyboard instantiate
一个新的FirstViewController
,而副用户旋转回肖像时也是如此。 我在willRotateToInterfaceOrientation
中的willRotateToInterfaceOrientation
方法中做了类似的FirstViewController.m
:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard-Landscape" bundle:[NSBundle mainBundle]];
FirstViewController *VC = [storyboard instantiateViewControllerWithIdentifier:@"VC1"];
self.view = VC.view;
但是iOS6 +上发生了以下崩溃: A view can only be associated with at most one view controller at a time!
在iOS5上尝试也没有崩溃,但旋转不能正常工作:窗口边界旋转,但视图本身保持原样。
如何在iOS 5和6上运行? 或者如果还有其他更好的方法,请为我提供一份工作代码示例,我将奖励您50分的赏金。
如果你真的不想使用自动布局,在单个.storyboard中执行此操作仍然可以通过IBOutlet (weak, nonatomic) UIView* portraitView
和IBOutlet (weak, nonatomic) UIView* landscapeView
。 将每个视图创建为FirstViewController
中FirstViewController的主view
的子视图。
然后在willRotateToInterfaceOrientation:
,执行以下操作:
if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation))
{
self.portraitView.hidden = NO;
self.landscapeView.hidden = YES;
}
else
{
self.portraitView.hidden = YES;
self.landscapeView.hidden = NO;
}
在.storyboard中处理您的视图时,您可以通过选中/取消选中右侧边栏中的hidden
标记来更好地查看每个子视图。
那么,这样做的另一个好处是,如果你有一些看起来没问题的视图,你就不必为它们维护一个单独的故事板文件和场景。
自动布局真的是要走的路。 一旦你有两个故事板,你就会有一个维护和一致性问题 - 如果你想让肖像和风景用户体验相同。 如果您因某种原因特别希望它们不同,那么两个故事板是合适的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.