UINavigationController中横向和纵向模式导航的最佳实践

时间:2011-06-08 09:37:15

标签: iphone ios uinavigationcontroller rotation

我正在开发一个支持横向和纵向的iPad应用程序。我的rootviewController有两个不同的nib文件。这是问题的情景 -
1.在肖像模式下从根视图中选择一个项目,以纵向方式推送下一个视图 2.旋转设备
3.按导航栏上的后退按钮
从堆栈加载的视图是rootViewController的portait视图。设备仍处于横向模式 请提出解决方案以解决上述问题 此外,请建议在处理设备轮换时遵循的最佳做法。

3 个答案:

答案 0 :(得分:1)

检查这个方法,可能会帮助你...

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations.
return ( 
        interfaceOrientation == UIInterfaceOrientationPortrait 
        || interfaceOrientation == UIInterfaceOrientationLandscapeLeft
        || interfaceOrientation == UIInterfaceOrientationLandscapeRight
        || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown
        );}

或尝试为控制器设置autoresizingMask希望它能帮到你。

答案 1 :(得分:1)

在以下方法中使用通知,并在 receivedRotate 方法中设置坐标。

-(void)viewWillAppear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

}

-(void)viewWillDisappear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
}

例如,在 receivedRotate 中,您可以将tableview的坐标设置为:

if (orientation == UIDeviceOrientationLandscapeLeft||orientation==UIDeviceOrientationLandscapeRight)
    {
        [tblView reloadData];
        tableX=70.0;

    }
    else
    {
        [tblView reloadData];
        tableX=48.0;
}  

在viewDidLoad中调用 recieveRotate 非常重要。

答案 2 :(得分:1)

您需要在方法中检查运行时的方向 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

} &安培;根据方向更改视图元素。