后台:我想确保我的viewControllers在出现时正确旋转。我的viewControllers具有很好的代码,可以在可见时管理旋转和方向。
问题:在NavigationController中给出两个viewControllers,viewC1
和viewC2
。我做了以下事情:
1。)将rootViewController设置为viewC1
2.。)将viewC2
推入NavigationController
3。)旋转
4.。)Pop viewC2
5.。viewC1
仍然停留在旧方向外观中(如willAnimateRotationToInterfaceOrientation
中的转换代码中未调用),并采用新方向。
我该怎么做才能确保viewC1
调用willAnimateRotationToInterfaceOrientation
重新构建自己以便在新轮换中正确查看?
其他信息:
这是所有代码(没有storyboard / xib)。我在所有观看次数上都shouldAutorotateToInterfaceOrientation
返回YES
。我使用willAnimateRotationToInterfaceOrientation
来管理我的所有轮换。
哦,请不要乱砍。例如,从旋转中复制代码,然后手动检查轮换并在viewDidAppear
中进行管理。
答案 0 :(得分:1)
考虑方法的名称,以及您想要实现的目标。
willAnimateRotationToInterfaceOrientation
表示视图控制器控制的视图即将为特定方向设置动画。如果您的视图位于导航堆栈的中间,则它不会显示在屏幕上。制作不在屏幕上的东西是昂贵的,并且最终毫无价值。所以,这种特殊的方法是不可能的,但剩下的问题是在UIKit中没有其他更合适的方法。原因是当它在屏幕外是无价值的时候旋转某些东西(即使没有动画)。当视图出现时,开发人员有责任处理方向的变化(“按需转换”)。
你说你不想要黑客,但你所描述的黑客攻击方法可能是最合适的方法。有一个类似的通用方法
-(void) updateLayoutForOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated { ... }
这不是一个坏主意。这可以是整个视图控制器的方向更改转换的处理程序。
您需要检查/处理方向问题的地方是
-(void) viewWillAppear:(BOOL)animated
-(void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation duration: (NSTimeInterval) duration
并且在这两个方面,请致电updateLayoutForOrientation:animated:
为您完成工作。