ios - 在 UINavigationController 中支持纵向和横向 View 的最佳实践

标签 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 开始构建一个 View 并将其推送到导航 Controller 。一切似乎都很顺利,但是当我向后导航时,我看到了之前的 PortraitViewController,而不是风景,而且它的 subview 都散布在周围,而不是我放置它们的地方。

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

最佳答案

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

https://github.com/Morpheu5/Rotation

关于ios - 在 UINavigationController 中支持纵向和横向 View 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6216920/

相关文章:

ios - Pod 文件没有在我的项目中创建?

iphone - 如何将相同的 UIButton 添加到 iphone 中所有 View Controller 的导航栏?

ios - 向 UITextField 添加不透明 subview

ios - 将 rootViewController 从 uiviewcontroller 更改为 uinavigationcontroller

iOS)如何制作顶部和底部固定 View 的Tab View

ios - 无法打开 Promise<[CLPlacemark]>

ios - 无法调用 tableViewController

iphone - pushViewController 在 iOS 5 上不起作用(在 iOS 6 上正常)

swift - 如何同时实现 UIViewController 堆栈行为

ios - 如何在标签栏不从主视图中消失的情况下继续查看 Controller