繁体   English   中英

使用故事板支持iPAD上多个方向的最佳方法(无AutoLayout或AutoResizing)

[英]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-PortraitMainStoryboard-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* portraitViewIBOutlet (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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM