【发布时间】:2021-05-06 19:21:27
【问题描述】:
我在使用 UISplitViewController MainSplitVC 时遇到此问题,并且无法在详细视图控制器上显示主视图控制器。基本上,在 iPad 上测试时,我希望主 VC 和细节 VC 并排可见,但在 iPhone(纵向模式)上,我只需要主 VC。目前,这适用于 iPad,但在 iPhone 的纵向模式下,Swift 首先显示详细视图控制器,我必须单击导航栏中的后退按钮才能返回主视图控制器。
我已经尝试了所有我能想到的方法。例如,我为拆分视图控制器创建了一个类MainSplitVC,其中我将UISplitViewController 和UISplitViewControllerDelegate 子类化。然后,在viewDidLoad() 中,我将首选显示模式设置为oneBesideSecondary(因为根据Xcode 将allVisible 替换为那个)。我还包含了函数collapseSecondary() 以始终折叠回主视图控制器。
class MainSplitVC: UISplitViewController, UISplitViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
print("viewDidLoad called")
self.preferredDisplayMode = UISplitViewController.DisplayMode.oneBesideSecondary
}
func splitViewController(
_ splitViewController: UISplitViewController,
collapseSecondary secondaryViewController: UIViewController,
onto primaryViewController: UIViewController) -> Bool {
print("collapseSecondary called")
return true
}
}
关于这个问题,我查阅了许多其他帖子,所有帖子都表明使用collapseSecondary() 函数并将preferredDisplayMode 设置为oneBesideSecondary 或allVisible 应该可以完成这项工作。但是,这些都不起作用。更重要的是,collapseSecondary() 函数甚至没有被调用,即使我在类头中包含了UISplitViewControllerDelegate。
如果我在下面的代码中犯了任何错误,谁能澄清一下?当应用程序打开时,我只想显示主视图控制器;详细视图控制器只是一个空白视图控制器,当单击主视图控制器的 tableview 中的某些内容时,它会更改为另一个。
我参考的链接如下:
- UISplitViewController showing detail view controller first on iPhone, also delegate not calling proper functions
- UISplitViewController in portrait on iPhone shows detail VC instead of master
- Open UISplitViewController to Master View rather than Detail
谢谢!
编辑 2/3/21:我已经解决了这个问题。我改为在UISplitViewControllerDelegate 下扩展SceneDelegate 并包含以下功能:
func splitViewController(_ svc: UISplitViewController, topColumnForCollapsingToProposedTopColumn proposedTopColumn: UISplitViewController.Column) -> UISplitViewController.Column {
return .primary
}
collapseSecondary 函数显然不起作用,因为存在“Interface Builder 不允许创建经典样式 UISplitViewController。(65966010) (FB8107534)”的错误,因此我收到错误消息“跳过委托回调, splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:。不支持 UISplitViewController 样式 DoubleColumn"。
谢谢!
【问题讨论】:
标签: ios swift xcode uisplitviewcontroller