【问题标题】:best method to support multiple orientations on iPAD with storyboards (no AutoLayout or AutoResizing)在 iPAD 上使用情节提要支持多个方向的最佳方法(无 AutoLayout 或 AutoResizing)
【发布时间】:2012-12-14 22:58:01
【问题描述】:

我想在我的 iPAD 应用程序上支持横向和纵向方向,该应用程序使用情节提要,而不涉及 iOS6+ 上的 Auto LayoutiOS 5 及更早版本上的 Auto Resizing 的复杂性(因为该应用程序将同时支持这两者iOS 5 & 6 所以这里不允许使用AutoLayout),我认为作为解决方案的起点如下:

创建两个独立的故事板:MainStoryboard-Portrait & MainStoryboard-Landscape,当当前视图控制器(我们将其命名为 FirstViewController)是纵向的,并且用户将设备旋转到横向时,我 instantiate 来自一个新的 FirstViewController MainStoryboard-Landscape 故事板,反之亦然,当用户旋转回纵向时。我在FirstViewController.mwillRotateToInterfaceOrientation 方法中做了类似的事情:

  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 分。

【问题讨论】:

    标签: objective-c ios xcode ipad storyboard


    【解决方案1】:

    如果您真的不想使用自动布局,仍然可以通过 IBOutlet (weak, nonatomic) UIView* portraitViewIBOutlet (weak, nonatomic) UIView* landscapeView 在单个 .storyboard 中执行此操作。将每个视图创建为 .storyboard 中 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 标志来更好地查看每个子视图。

    那么,这样做的另一个好处是,如果您有一些无论方向如何看起来都不错的视图,您不必为它们维护单独的故事板文件和场景。

    【讨论】:

    • 对于复杂的 UI 视图来说,它仍然是一个设计难题 + 我认为每个场景同时加载两个视图会占用更大的内存。
    • 如果你有一个带有许多视图控制器的纵向和横向视图的故事板,即使内存超过 8 GB,xcode 也会吃掉所有内存
    【解决方案2】:

    自动布局确实是要走的路。一旦你有两个故事板,你就会遇到维护和一致性问题——如果你希望纵向和横向用户体验相同。如果您出于某种原因特别希望它们有所不同,那么两个故事板是合适的。

    【讨论】:

    • 当您开始处理复杂的 UI 项目时,自动布局非常复杂
    • 可以,但是 XCode UI 设计器隐藏了很多复杂性。
    • 这不是一个好的答案,因为他说他希望能够支持 iOS 6 之前的版本。通过只支持 iOS 6,您实际上会扼杀一大部分用户群。 iOS 6 的采用是好的,但不是那么好。
    • @jmstone : 是的,只支持 iOS 6 肯定会扼杀一部分用户群,但采用率非常高...... 96% 的任何东西都是非常好的采用。
    • 现在 96%,8 月。 1 月份我写原始评论时,它还不到 96%。
    猜你喜欢
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多