【问题标题】:Splitview Orientation issue.(Portrait mode)拆分视图方向问题。(纵向模式)
【发布时间】:2013-06-05 11:22:20
【问题描述】:

背景

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

问题

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

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

这引起了第二个问题。当我注销时,上面的 sn-p 正确关闭了主视图,并且看到了登录视图。但是现在如果我将方向更改为横向并再次登录,主视图是替换为黑色条带(宽度与masterview相等)。我认为splitview仍然认为它在portarit视图中并且方向更改不会传播到splitviewcontroller。任何人都可以帮我解决这个问题。 p>

到目前为止我做了什么

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

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

我不知道从哪里开始。重要提示:我使用的是 iOS 6.0。非常感谢任何帮助。

【问题讨论】:

    标签: ios ipad ios6 orientation uisplitviewcontroller


    【解决方案1】:

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

    - (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];
        }
    }
    

    这只会在纵向模式下发生。 Thanks to....

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多