我转向使用基于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。
将此属性赋予新值会导致呈现控制器转换到新的特征集合,这可能会导致呈现界面的动画。
将新值分配给呈现控制器不会以任何方式改变我呈现的界面。(即使在从UIViewControllerTransitioningDelegate
对象内创建UIPresentationController
时分配了overrideTraitCollection
。)
我错过了什么?是否可能在更细粒度的层面上使用UIPresentationController
执行自适应呈现?