我正在UIPresentationController
为我的视图控制器转向基于演示文稿,但对 API 感到有些困惑。
我有一个自定义侧边栏样式视图控制器演示文稿(类似于LookInside
WWDC 2014 演示代码)。
此类集群(UIPresentationController
、UIViewControllerTransitioningDelegate
和UIViewControllerAnimatedTransitioning
)在常规尺寸的类视图上将视图控制器呈现为屏幕边缘的侧边栏,并在紧凑尺寸的类视图上将相同的视图控制器呈现为全屏。
在 Resizable 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
:
使用此属性来指定要应用于呈现和呈现视图控制器的任何特征。您指定的特征会覆盖当前对视图控制器有效的任何现有特征。此属性的默认值为 nil。
为该属性分配一个新值会导致演示控制器转换到新的特征集,这可能会导致呈现界面的动画。
将新值分配给呈现控制器不会导致我呈现的界面发生任何变化。(即使我指定了overrideTraitCollection
从对象UIPresentationController
内创建的时间UIViewControllerTransitioningDelegate
。)
我错过了什么?UIPresentationController
是否可以在更精细的级别上执行自适应演示?