UISplitViewController 以紧凑尺寸启动时未加载其子级
Posted
技术标签:
【中文标题】UISplitViewController 以紧凑尺寸启动时未加载其子级【英文标题】:UISplitViewController not loading its child when launched in compact size 【发布时间】:2021-11-04 21:35:33 【问题描述】:当应用程序具有紧凑特征时,我在 SplitScreen 中启动应用程序时遇到问题,UISplitViewController
不会加载其子项,除非将其拖入常规特征。视图层次结构是 UITabBarController > UISplitViewController > UINavigationController > UIViewController。
我在这里制作了一个简短的视频,其中包含以下行为:https://imgur.com/1tmW96N。如您所见,除非我将窗口拖到常规大小,否则不会加载红色视图。我也在控制台中收到此消息
[Assert] Unexpected nil collapsedVC in the panelController
除非我将窗口拖到常规大小,否则我的 VC 的 viewDidLoad
方法永远不会被调用。
【问题讨论】:
【参考方案1】:这是拆分视图控制器的预期行为,它们以水平紧凑的布局折叠到一个控制器。来自documentation:
拆分视图控制器执行折叠和展开转换以响应其界面中的某些变化。例如,当界面的大小类在水平规则和水平紧凑之间切换时,当用户交互隐藏或显示列时,或者当您以编程方式隐藏或显示列时,就会发生转换。拆分视图控制器与其委托对象一起执行折叠和展开转换。委托是您提供的采用 UISplitViewControllerDelegate 协议的对象。
您可以控制在折叠状态时显示哪个视图控制器:
在列式拆分视图界面中,当界面折叠时,您可以显示与主要、辅助或辅助不同的视图控制器。使用 setViewController:forColumn: 为 UISplitViewControllerColumnCompact 列设置所需的视图控制器。
【讨论】:
好吧,如果我将视图调整回紧凑尺寸,我会得到红色视图,这在我打开应用程序时不会发生。此外,当设置我想在顶部显示主视图控制器时,我得到相同的结果 @ZR19980119 我不确定主视图控制器是什么意思,我假设那是带有红色视图的控制器?您能否分享您的完整视图控制器层次结构的任何代码示例或故事板屏幕截图? 我刚刚测试过,似乎 UITabBar 是问题...如果我只是将 SVC 设置为窗口中的 rootViewController 一切正常,但嵌入在选项卡栏中的加载不正确。现在想知道我该如何解决这个问题 @ZR19980119 在不知道您的确切布局的情况下很难提供帮助,但您可以做的一件事是始终通过以编程方式访问视图来强制加载视图:let _ = redController.view
以上是关于UISplitViewController 以紧凑尺寸启动时未加载其子级的主要内容,如果未能解决你的问题,请参考以下文章
UISplitViewController:最初显示详细视图
嵌套详细视图(UISplitViewController)中缺少后退按钮
UISplitViewController - 以纵向模式打开,masterViewController 可见
以横向更改 UISplitViewController 的 UITableViewController Master 的背景图像