1

背景

我有一个 iPad 拆分视图应用程序。拆分视图是窗口的根视图控制器。我需要应用程序的登录屏幕,因此我将其呈现如下:[self.splitViewController presentViewController:self.loginView animated:NO completion:nil];。我在主视图上有一个弹出窗口,锚定在导航栏UIBarButtonItem上,这有助于用户注销。这是工作 gr8。

问题

我需要支持两个方向,因此主视图也必须以纵向模式显示。我面临的第一个问题是当用户以纵向模式退出应用程序时,主视图不会被关闭并且登录视图当主视图仍然可见时显示。我设法通过复制左侧栏按钮上的点击事件来解决此问题,如下所示:

[self.detailViewController.navigationItem.leftBarButtonItem.target performSelector:self.detailViewController.navigationItem.leftBarButtonItem.action]; 

这就产生了第二个问题。当我注销时,上面的代码片段正确地关闭了主视图并看到了登录视图。但是现在,如果我将方向更改为横向并再次登录,主视图将被黑色条替换(宽度等于主视图)。我认为splitview 仍然认为它在 portarit 视图中,并且方向更改不会传播到 splitviewcontroller。任何人都可以帮我解决这个问题。

到目前为止我做了什么

我尝试-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration使用详细视图上的更新方向显式调用,但它不起作用。

我将应用程序的 rootview 控制器重置为相同的 splitviewcontroller 实例,- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions希望这可以用作刷新,但它没有注意。

我不知道从这里去哪里。重要提示:我在 iOS 6.0 上。非常感谢任何帮助。

4

1 回答 1

0

好吧,我通过更改主视图的原点来修复它

- (void)showMasterView
{
    if (!self.masterIsVisible)
    {
        self.masterIsVisible = YES;
        NSArray *controllers = self.splitViewController.viewControllers;
        UIViewController *rootViewController = [controllers objectAtIndex:0];

        UIView *rootView = rootViewController.view;
        CGRect rootFrame = rootView.frame;
        rootFrame.origin.x += rootFrame.size.width;

        [UIView beginAnimations:@"showView" context:NULL];
        rootView.frame = rootFrame;
        [UIView commitAnimations];
    }
}

- (void)hideMasterView
{
    if (self.masterIsVisible)
    {
        self.masterIsVisible = NO;
        NSArray *controllers = self.splitViewController.viewControllers;
        UIViewController *rootViewController = [controllers objectAtIndex:0];

        UIView *rootView = rootViewController.view;
        CGRect rootFrame = rootView.frame;
        rootFrame.origin.x -= rootFrame.size.width;

        [UIView beginAnimations:@"hideView" context:NULL];
        rootView.frame = rootFrame;
        [UIView commitAnimations];
    }
}

这只会在纵向模式下发生。 感谢……

PS:对于没有早点发布这个答案,我们深表歉意。问题解决后,我完全忘记了它。现在纠正我的错误:)

于 2014-05-26T10:42:34.570 回答