在两个不同的 UIPresentationController 之间进行适配

Posted

技术标签:

【中文标题】在两个不同的 UIPresentationController 之间进行适配【英文标题】:Adapting between two different UIPresentationController's 【发布时间】:2015-07-29 02:04:34 【问题描述】:

我想根据当前的特征集合在两个不同的UIPresentationController 之间进行调整。例如,两个控制器可以是 UIPopoverPresentationController 用于任何特征,自定义 UIPresentationController 用于紧凑的水平特征(例如 iPhone)。

不幸的是,这在最新的 ios 8 中似乎是不可能的。尤其是:

您可以设置UIAdaptivePresentationControllerDelegate 来换出演示样式,但只允许标准的全屏演示控制器。

您可以在呈现视图控制器之前选择要使用的呈现控制器,但是当特征集合发生更改时,这实际上并不能在呈现之后适应,例如在 iPad 多任务处理或方向更改中。

几个不同的解决方案尝试:Tumblr、Irace

有什么建议吗?

【问题讨论】:

【参考方案1】:

假设您需要两个表示控制器来适应是错误的假设。

只有一个表示控制器,您必须使用委托方法调整视图和/或转换。对于自定义转换,您只需在从viewControllerForAdaptivePresentationStyle 返回的视图控制器上设置一个转换委托类,在我的情况下,它是一个导航控制器,具有透明的暗色视图,底部有表格,右侧导航项中有完成按钮。我的自定义转换从底部向上移动表格,同时调暗和调整调暗视图的大小,并在导航栏中淡入淡出。如果您想查看自己运行地图的行为并点击右下角的信息按钮并在 iPhone 和 iPad 上尝试,我已经完全复制了它。以下是紧凑和常规的屏幕截图:

【讨论】:

那么您是否将弹出式演示控制器设置为您的演示控制器?或者您是否使用自定义演示控制器来完成此操作? 是的弹出窗口。这可能会有所帮助:useyourloaf.com/blog/making-popovers-adapt-to-size-classes 你能分享这个示例代码吗?试图弄清楚这一点。您是否继承了 UIPopoverPresentationController 并且它会自行调整?

以上是关于在两个不同的 UIPresentationController 之间进行适配的主要内容,如果未能解决你的问题,请参考以下文章

在 Kestrel 上为 ASP.NET Core 上的两个不同端点发布两个不同的端点

如何使用两个不同的节点版本运行两个不同的nodejs应用程序[关闭]

使用 Bootstrap 如何在两个不同的媒体查询上使用两个不同的 col-sm-* 类?

我想在单个表格视图中使用来自 nib 的两个不同的自定义单元格。两个原型电池具有不同的高度

如何在不同方向旋转两个不同的图像?

在不同的列名上合并两个不同的数据框[重复]