背景
我有一个iPad splitview应用程序。拆分视图是窗口的根视图控制器。我需要一个应用程序的登录屏幕,因此我这样呈现:[self.splitViewController presentViewController:self.loginView animated:NO completion:nil];
。我在主人身上有一个弹出窗口视图锚定到导航栏UIBarButtonItem
,这有助于用户注销。这是工作gr8。
问题:
我需要支持两个方向,因此主视图也必须以纵向模式显示。我遇到的第一个问题是当用户以纵向模式退出应用程序时,主视图不会被解除,当主视图仍然可见时,将显示登录视图。我设法通过复制左侧栏按钮上的点击事件来解决此问题,如下所示:
[self.detailViewController.navigationItem.leftBarButtonItem.target performSelector:self.detailViewController.navigationItem.leftBarButtonItem.action];
这引起了第二个问题。当我退出时,上面的代码片段正确地解除了主视图并且看到了loginview。但是现在如果我将我的方向更改为横向并再次登录,则主视图将被替换为一个黑色条带(宽度与masterview相等)。我认为splitview仍然认为它在portarit视图中并且方向更改没有传播到splitviewcontroller 。任何人都可以帮我解决这个问题。
到目前为止我做了什么:
我尝试在详情视图中使用更新后的方向明确调用-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
,但它无效。
我将应用程序的rootview控制器重置为在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
中创建的同一个splitviewcontroller实例,希望这可以作为刷新但不注意。
我不知道从哪里开始。重要说明:我在iOS 6.0上。非常感谢任何帮助。
答案 0 :(得分: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];
}
}
这只会在纵向模式下进行。 Thanks to...
PS:对于之前没有发布此答案表示诚挚的歉意。问题解决后我完全忘了它。现在修补我的错误:)