gpt4 book ai didi

iphone - 基于 View 大小的自适应 UIPresentationController

转载 作者:行者123 更新时间:2023-12-03 18:23:37 27 4
gpt4 key购买 nike

我的 View Controller 正在转向基于 UIPresentationController 的演示,但在使用 API 时遇到了一些困惑。

我有一个自定义侧边栏样式 View Controller 演示(类似于 LookInside WWDC 2014 演示代码)。

此类簇(UIPresentationControllerUIViewControllerTransitioningDelegateUIViewControllerAnimatedTransitioning)定期将 View Controller 呈现为屏幕边缘的侧边栏尺寸类 View ,并在紧凑尺寸类 View 上呈现与全屏相同的 View Controller 。

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

但是,我想要更多的粒度。我想在 iPhone 6 和 6+ 处于横向方向时使用侧边栏样式 View Controller 演示,并在所有纵向 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 的文档指出:

Use this property to specify any traits that you want to apply to the presented and presenting view controllers. The traits you specify override any existing traits currently in effect for the view controllers. The default value of this property is nil.

Assigning a new value to this property causes the presentation controller to transition to the new set of traits, which could result in animations to the presented interface.

将新值分配给呈现 Controller 不会导致我呈现的界面以任何方式发生变化。 (即使我在从 UIViewControllerTransitioningDelegate 对象中创建 UIPresentationController 时分配了 overrideTraitCollection。)

我错过了什么?是否可以使用 UIPresentationController 在更精细的级别上执行自适应演示?

最佳答案

Is it possible to perform adaptive presentation with UIPresentationController on a more granular level?

不容易。

我建议选择以下选项之一:

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

  2. 使用演示文稿,但使用 UIKit。一种方法是重写 viewWillTransitionToSize:withTransitionCoordinator: 并关闭,然后重新呈现所呈现的 View Controller ,进行所需的任何更改,例如提供不同的呈现样式或呈现 Controller 。这可以在不花费太多时间的情况下给出不错的结果。

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

关于iphone - 基于 View 大小的自适应 UIPresentationController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29539877/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com