仅为某些视图隐藏主 UISplitViewController

Posted

技术标签:

【中文标题】仅为某些视图隐藏主 UISplitViewController【英文标题】:Hiding master UISplitViewController for only certain views 【发布时间】:2012-08-22 12:18:31 【问题描述】:

我有一个 UISplitViewController,它在 master 中有一个 UINavigationController,在 detail 中有一个 UIViewController。当设备定向为横向模式时,我希望保留正常行为。 IE。大师以横向显示并以纵向隐藏。

但是,取决于用户在主控中单击的内容,取决于将哪个 UIViewController 加载到 UISplitViewController 的详细信息部分。我想要的是当用户单击详细 UIViewController 中的按钮时,master 以横向模式隐藏。问题是我无法让它工作。

我的委托看起来像这样(为了便于查看,删除了一些行):

public class SplitControllerDelegate : UISplitViewControllerDelegate 
                    SplitViewController incomingController;

     private bool hideMaster = false;

     public override bool ShouldHideViewController (UISplitViewController svc,        
                                       UIViewController viewController, 
                                       UIInterfaceOrientation inOrientation) 
          return hideMaster;
     
     public void SetHideMaster(bool value) 
          hideMaster = value;
     


然后我从详细的 UIViewController 中调用它,例如

   splitControllerDelegate.SetHideMaster(value);

但是没有任何改变。我不确定如何使它执行更改?主人应该立即消失吗?是什么导致 WillHideViewController 触发?

谢谢

迈克

【问题讨论】:

【参考方案1】:

您尝试做的事情不能正式完成。 ShouldHideViewController() 仅在设备旋转时调用。因此,除非您前后旋转,否则您的控制器不会消失。

您有多种选择:

不要使用UIListViewController,而是使用其他第三方替换 使用 ios5 的 UIViewController 包含特性,实现自己的拆分视图 对UISplitViewController 应用破解

关于最后一点。如果您将Delegate 属性设置为NULL 然后分配一个新委托,您应该能够强制调用ShouldHideViewController()。之后,使用当前方向调用拆分视图控制器的WillRotate()方法。

我会选择第二个选项。

【讨论】:

【参考方案2】:

根据设计,您无法使用标准 UISplitView 做很多事情,请尝试使用第三方控件:

https://github.com/mattgemmell/MGSplitViewController

【讨论】:

是否可以安装这些组件以与 Xamarin 一起使用?

以上是关于仅为某些视图隐藏主 UISplitViewController的主要内容,如果未能解决你的问题,请参考以下文章

在某些视图控制器中隐藏状态栏 *特定*

UISplitViewController - 隐藏主滑入视图

使用响应式设计框架创建在移动设备上隐藏细节视图的主细节模式

如何在首次加载应用程序时隐藏主弹出视图?

仅为具有特定 Memberpress 订阅的用户隐藏重力表单字段

仅为某些架构定义预处理器宏