Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UINavigationController中支持纵向和横向视图的最佳实践_Ios_Uinavigationcontroller_Uitabbarcontroller_Landscape_Portrait - Fatal编程技术网

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

Ios 在UINavigationController中支持纵向和横向视图的最佳实践,ios,uinavigationcontroller,uitabbarcontroller,landscape,portrait,Ios,Uinavigationcontroller,Uitabbarcontroller,Landscape,Portrait,我到处寻找,我不确定我找到了什么是处理这个问题的最好方法(尽管它似乎是唯一的方法) 根据我实施的相关方法,一切似乎都很好。不幸的是,我必须处理UINavigationController,每个页面都必须支持纵向和横向模式,并在两种模式下重现相同的功能。这意味着,如果用户在某个时刻决定从纵向切换到横向,整个应用程序应该允许他以自己选择的模式在页面中来回导航 显然,缺少的一点文档是如何处理这个问题。在我的视图中,我有许多按钮,带有执行导航的附加showChild方法。在纵向模式下(据我所知,这是默认

我到处寻找,我不确定我找到了什么是处理这个问题的最好方法(尽管它似乎是唯一的方法)

根据我实施的相关方法,一切似乎都很好。不幸的是,我必须处理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:方法与此完全相同,它构建一个从肖像ViewController开始的视图,并将其推送到导航控制器。一切似乎都进行得很顺利,但当我返回导航时,我看到的是前面的肖像视图控制器,而不是风景,而且它的子视图都分散在周围,而不是我放置它们的位置


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

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


我认为您希望在ViewWill中进行测试:对于以前可见的view controller,它仍然处于上次出现时的方向,当在UINavigationController中推送和弹出ViewController时,不会调用这些方法。我可以将自定义RootViewController设置为UINavigationControllerDelegate并使用相关方法,但我不知道如何。好的,我可以通过使用自定义RootViewController并将其设置为导航控制器的代理来解决。不幸的是,它没有我希望的那么好,但我明天会检查它。我还必须检查一个设备,因为现在我正在使用模拟器,这是相当糟糕的方向。