【问题标题】:Best practices for navigations in landscape and portrait mode in UINavigationControllerUINavigationController 中横向和纵向模式导航的最佳实践
【发布时间】:2011-09-10 17:32:45
【问题描述】:

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

【问题讨论】:

    标签: iphone ios uinavigationcontroller rotation


    【解决方案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,这非常很重要。

    【讨论】:

    • 感谢 nitish 的详细回答。它类似于上面提到的 iAmitwagh
    • 是的。但是我之前发过:)
    【解决方案2】:

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

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

    或尝试为控制器设置 autoresizingMask 希望对您有所帮助。

    【讨论】:

    • 我返回 YES 以支持所有的旋转。你能说明一下 autoresizingMask 吗?如何以及在哪里设置它?
    • 你的 UIComponent 的属性。您可以将其设置为 UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight。它会根据方向自动调整 UI 组件的宽度和高度。
    【解决方案3】:

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

    } 并根据方向更改视图元素。

    【讨论】:

    • 感谢 Amit。它与实现 -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 处理旋转的方法一起工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多