UISplitViewControlller主控制器隐藏

时间:2012-08-19 19:04:45

标签: rotation uisplitviewcontroller ios6

我正在将应用程序移植到iOS 6,我找到了一个解决方案,我已经设法在分割视图控制器中显示主视图控制器的开启和关闭不再适用于iOS 6。

这是我用来触发iOS6上的操作的代码片段,如果设备被旋转:

- (void)hideMaster:(BOOL)hide {

[self clearOverlay];

UISplitViewController* spv = appDelegate.splitViewController;

NSLog(@"hidemaster: I do %@show the master", (hide?@"not ":@""));

self.hiddenMaster= hide;

NSLog(@"delegate=%@", spv.delegate);

[spv.view setNeedsLayout];
spv.delegate=nil;

spv.delegate=self;

}

- (BOOL)splitViewController:(UISplitViewController*)svc shouldHideViewController: (UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation {

NSLog(@"Spv: I do %@show the master", (self.hiddenMaster?@"not ":@""));

return self.hiddenMaster;
}

如果用户旋转设备,如何强制触发shouldHideViewController回调?

谢谢, Fabrizio Bartolomucci

4 个答案:

答案 0 :(得分:5)

比预期更容易:我把[spv.view setNeedsLayout];在调用你的功能之后很快就完成了这项工作。 这是为了其他用户的利益的完整代码:

- (void)hideMaster:(BOOL)hide {
   NSLog(@"hide-unhide master");
   UISplitViewController* spv = appDelegate.splitViewController;
   spv.delegate=self;
   self.hiddenMaster= hide;
   [spv willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];
   [spv.view setNeedsLayout];
}

- (BOOL)splitViewController:(UISplitViewController*)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation {
   NSLog(@"Spv: I do %@ show the master", (self.hiddenMaster?@"not ":@""));
   return self.hiddenMaster;  
}

答案 1 :(得分:1)

而不是

spv.delegate=nil;
spv.delegate=self;

你需要做

[spv willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];

你会很高兴。

答案 2 :(得分:0)

无法解决此问题。甚至苹果也出现了白旗。我改变了架构,将所有视图都作为弹出窗口,完全摆脱了分割视图控制器。我不能再延迟推出自动布局了。

答案 3 :(得分:0)

我最终通过遵循Apple文档建议只根据用户的指示打开它来摆脱它。现在我恢复它只是为了一个辅助面板,用户实际上手动打开,而iPhone版本则由一个展开的segue管理。