基于视图大小的自适应 UIPresentationController

2023-12-20

我要搬到UIPresentationController基于我的视图控制器的演示,但在 API 方面遇到了一些混乱。

我有一个自定义侧边栏样式视图控制器演示文稿(类似于LookInsideWWDC 2014 演示代码)。

这个类簇(UIPresentationController, UIViewControllerTransitioningDelegate, and UIViewControllerAnimatedTransitioning)在常规尺寸类视图上将视图控制器呈现为屏幕边缘的侧边栏,并在紧凑尺寸类视图上将相同的视图控制器呈现为全屏。

在可调整大小的 iPad 目标上进行测试显示了正确的行为:我将水平尺寸类别设置为“紧凑”,并且我的视图控制器从侧边栏切换到全屏。

但是,我想要更多的粒度。我想在设备处于横向方向时在 iPhone 6 和 6+ 上使用侧边栏样式视图控制器演示,并在所有纵向方向的 iPhone 上使用全屏样式演示。

所以按照我的方法

- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator

我实现了一些逻辑来检测侧边栏是否会占用太多屏幕,假设我使用以下条件:

//If my sidebar is going to occupy more than half the new width of the view...
if( self.sidebarTransitionController.width > size.width / 2.0 )
{
    //Override the presentation controller's trait collection with Compact horizontal size class
    sidebarPresentationController.overrideTraitCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact];
}
else
{
    //Otherwise override the trait collection with Regular
    sidebarPresentationController.overrideTraitCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];

}

然而这没有任何作用。的文档UIPresentationController.overrideTraitCollection states:

使用此属性可以指定要应用于呈现的和呈现的视图控制器的任何特征。您指定的特征将覆盖当前对视图控制器有效的任何现有特征。该属性的默认值为 nil。

为此属性分配新值会导致呈现控制器转换到新的特征集,这可能会导致呈现的界面出现动画。

将新值分配给呈现控制器不会导致我呈现的界面以任何方式发生变化。 (即使我分配overrideTraitCollection当。。。的时候UIPresentationController是从内部创建的UIViewControllerTransitioningDelegate目的。)

我缺少什么?是否可以执行自适应演示UIPresentationController在更细粒度的层面上?


是否可以执行自适应演示UIPresentationController在更细粒度的层面上?

不容易。

我建议使用以下选项之一:

  1. 放弃控制并接受 UIKit 有限的适应性:您可以更改为全屏演示或为特定特征集合呈现不同的视图控制器。使用它可以更快地发布您的应用程序。

  2. 使用演示文稿,但与 UIKit 配合使用。一种方法是覆盖viewWillTransitionToSize:withTransitionCoordinator:并关闭,然后重新呈现呈现的视图控制器,进行您想要的任何更改,例如提供不同的呈现样式或呈现控制器。这可以在不花费太多时间的情况下给出不错的结果。

  3. 使用视图控制器包含。这大约是您在坚持 UIKit 最佳实践的同时可以达到的最低级别。您的主视图控制器成为容器视图控制器的子级,而不是显示您要求容器显示其他视图控制器。如果应用程序应该是定制且精致的,那么请选择此选项,并且您可以花时间使其恰到好处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于视图大小的自适应 UIPresentationController 的相关文章

随机推荐