在UINavigationController中支持纵向和横向视图的最佳实践

时间:2011-06-02 15:51:02

标签: ios uinavigationcontroller uitabbarcontroller landscape portrait

我搜索得很高,我不确定我提出的是解决这个问题的最佳方式(尽管它似乎是唯一的方法)。

根据Want to use muliple nibs for different iphone interface orientations我实施了相关的方法,一切似乎都运行良好。不幸的是,我必须处理UINavigationController,每个页面都必须支持纵向和横向模式,并在两种模式下重现相同的功能。这意味着如果用户在某个时刻决定从纵向切换到横向,整个应用程序应该允许他以他选择的模式在页面中来回导航。

显然缺少的文档是如何处理这个问题。在我的视图中,我有许多带有附加showChild方法的按钮,用于执行导航。一切都适用于纵向模式(据我所知,这是默认模式)。方法如下:

- (IBAction)showChild:(UITapGestureRecognizer *)sender {
    UIView *view = [sender view];
    PortraitViewController *nextPortraitViewcontroller = [[PortraitViewController alloc] initWithNibName:@"Portrait" bundle:nil];
    [self.navigationController pushViewController:nextPortraitViewcontroller animated:YES];
}

但是当涉及到横向模式时,我会得到不一致的结果。 LandscapeViewController类中的showChild:方法完全相同,它构建一个从PortraitViewController开始的视图,并将其推送到导航控制器。这一切看起来都很顺利但是当我向后导航时,我得到的是先前的PortraitViewController,而不是横向,并且它的子视图都在四处传播,而不是我放在它们的位置。

现在问题是:因为Apple似乎并不真正关心文档和最佳实践(afaik这整个机制远非理想,我可以说这来自人机交互设计和编程的背景什么是纠正 - 苹果这样做的方式?

1 个答案:

答案 0 :(得分:2)

我设置了一个示例项目来演示我如何“解决”我的问题。它可能不是唯一的方式,也不是最好的方式,但由于文档或缺乏,这是我提出的最佳方式。

https://github.com/Morpheu5/Rotation