在横向模式下启动应用程序时,UIOrientation无法正常工作

时间:2012-01-10 15:04:47

标签: iphone ios ipad uitableview uiinterfaceorientation

我创建了一个支持所有方向的应用程序。

我还在viewDidLoad方法中创建了一个表和搜索栏(不使用xib)。我还编写了以下代码来调整表格视图和搜索栏的位置。

当我在纵向视图中启动应用程序时,它可以正常工作,当我旋转到横向视图时,它可以完美地调整视图。

但是当我以横向模式启动我的应用程序时,视图不会被调整,而是采用纵向视图的定位。但是,当我以纵向旋转然后横向拍摄时,它可以正常工作。

为了确保捕获到正确的方向,我在此方法中写了NSLog,它显示了正确的值。

另外为了确保明确调用此方法(adjustViewsForOrientation),我也在viewDidLoad中调用了该方法。

[self adjustViewsForOrientation:self.interfaceOrientation];

以下是代码片段的其余部分:

- (void) adjustViewsForOrientation:(UIInterfaceOrientation)orientation {
    if (orientation == UIInterfaceOrientationLandscapeLeft || 
            orientation == UIInterfaceOrientationLandscapeRight) {
        aTableView.frame = CGRectMake(705, 220, 320, 280);
        sBar.frame=CGRectMake(805, 0, 220, 40);
        NSLog(@"inside landscape");        
    }
    else if (orientation == UIInterfaceOrientationPortrait || 
                 orientation == UIInterfaceOrientationPortraitUpsideDown) {
        aTableView.frame = CGRectMake(450, 220, 320, 280);
        sBar.frame=CGRectMake(550,3,220,40);
    }
}

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
                                 duration:(NSTimeInterval)duration {
    // [self adjustViewsForOrientation]
    [self adjustViewsForOrientation:toInterfaceOrientation];
    NSLog(@"landscap");
}

1 个答案:

答案 0 :(得分:0)

尝试这种方法,它可能有所帮助。在viewDidLoad方法中注册UIDeviceOrientationDidChange:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(adjustViewsForOrientation:) name:UIDeviceOrientationDidChangeNotification object:nil];

并更改-(void) adjustViewsForOrientation:(UIInterfaceOrientation)orientation

-(void) adjustViewsForOrientation:(NSNotification *)notification

并通过获取方向值

获取新方向

e.g。 UIDeviceOrientation newDeviceOrientation = [notification orientation];