splitView
的默认行为是当它从水平常规环境转换为水平紧凑环境时崩溃。
有可能以某种方式覆盖它吗?
由于某些设计解决方案,我希望UISplitViewController
始终得到扩展。
我在collapsed
的文档中找不到解决方案:属性<nav role="navigation">
<div align="center">
<ul>
<li><a href="index.php">Home</a></li>
<li><a href="games.php">Games</a></li>
<li><a href="trivia.php">Trivia</a></li>
<li><a href="contact.php">Contact</a></li>
</ul>
</div>
</nav>
是只读的,委托方法仅适用于&#34;如何折叠&#34;,但不是为了&#34;根本不崩溃&#34;。我使用的是iOS9 SDK。
答案 0 :(得分:1)
我明白了。 文件声明:
拆分视图控制器确定其子视图的排列 控制器基于可用空间。在横向规则 环境,拆分视图控制器呈现其视图控制器 尽可能并排。在水平紧凑的环境中, 拆分视图控制器更像是导航控制器, 最初显示主视图控制器并按或 根据需要弹出辅助视图控制器。
因此,splitView将始终在Compact水平环境中折叠并在Regular中展开。解决方案是告诉splitView我们希望它扩展时它具有Regular水平环境。这个想法取自WWDC 2014 Video&#34;使用UIKit构建自适应应用程序&#34;。不幸的是,他们在视频中提及的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将始终具有常规水平特征集合,从而进行扩展。