【问题标题】:Don't collapse UISplitViewController in horizontally compact environment不要在水平紧凑的环境中折叠 UISplitViewController
【发布时间】:2015-12-15 21:21:15
【问题描述】:
UISplitViewController 的默认行为是,当它从水平规则环境转换为水平紧凑环境时,它会折叠。
是否有可能以某种方式覆盖它?
由于某些设计解决方案,我希望始终扩展 splitView。
我在UISplitViewController 的文档中没有找到解决方案:collapsed 属性是只读的,委托方法仅用于“如何折叠”,而不是“根本不折叠”。我正在使用 iOS9 SDK。
【问题讨论】:
标签:
ios
iphone
ipad
cocoa-touch
uisplitviewcontroller
【解决方案1】:
我想通了。
文档状态:
拆分视图控制器决定其子视图的排列
基于可用空间的控制器。在水平规则
环境中,拆分视图控制器呈现其视图控制器
尽可能并排。在水平紧凑的环境中,
拆分视图控制器更像导航控制器,
最初显示主视图控制器并推送或
根据需要弹出辅助视图控制器。
因此 splitView 在 Compact 水平环境中将始终折叠并在 Regular 中展开。解决的办法是在我们想要展开的时候告诉splitView它有Regular水平环境。这个想法来自WWDC 2014 Video“使用 UIKit 构建自适应应用程序”。不幸的是,他们在视频中提到的sample code 并未涵盖这种情况。但我们的想法是为 SplitViewController 创建包含 ViewController,我们可以在其中使用方法 setOverrideTraitCollection:forChildViewController: 覆盖 SplitViewController 的 trait 集合@
@implementation ContainingViewController
- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nil bundle:nil];
if (self)
{
_splitViewController = [[UISplitViewController alloc] initWithNibName:nil bundle:nil];
_splitViewController.viewControllers = <view controllers>;
[self addChildViewController:_splitViewController];
[self.view addSubview:_splitViewController.view];
UITraitCollection *horizontallyRegularTraitCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
[self setOverrideTraitCollection:horizontallyRegularTraitCollection forChildViewController:_splitViewController];
}
return self;
}
使用此代码,SplitViewController 将始终具有常规水平特征集合,从而扩展。