我们在不使用故事板的情况下实施了UISplitViewController
。我们的拆分视图控制器由主控制器和详细控制器组成,两者都单独包含在UINavigationController
中。我们使用以下命令配置了拆分视图控制器:
preferredDisplayMode = .allVisible
func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {
return false
}
通过这样的设置,我们预计iPad将同时具有纵向和横向可见的主控制器和细节控制器。这很好用。对于iPhone,我们希望它的行为类似于常规的导航控制器,因此主机(在我们的案例表中)将首先显示,可能转换到细节屏幕并返回(使用导航栏)。对于转换主 - >详细信息,我们称为拆分视图控制器的方法:showDetailViewController(detailNavigationController)
。有了这样的实现,即使我们设置了详细信息屏幕,我们也会得到一个奇怪的行为。出于某种原因,屏幕的顶部和底部也有一个空白区域。我们认为它是由包含细节控制器的“额外”导航控制器引起的。因此,每当我们转换master->细节时,我们会对iPad和iPhone进行不同的调用:
if isiPad() {
showDetailViewController(UINavigationController(rootViewController: detailController, sender: self)
} else if isiPhone() {
showDetailViewController(detailViewController, sender: self)
}
目前这对我们“有效”,但我们显然希望用更清洁的解决方案取而代之。