gpt4 book ai didi

ios - 为什么我不能在第一次运行时在 UISplitViewController 中将 Master 和 Detail View 并排放置,但在旋转时它可以工作?

转载 作者:IT王子 更新时间:2023-10-29 05:37:20 25 4
gpt4 key购买 nike

我有一个 Split View Controller ,左侧是项目列表,右侧是详细 View 。 AppDelegate中的相关代码:

let splitViewController = mainView.instantiateViewControllerWithIdentifier("initial") as! UISplitViewController



let rightNavController = splitViewController.viewControllers.last as! UINavigationController
let detailViewController = rightNavController.topViewController as! DetailsIpad

let leftNavController = splitViewController.viewControllers.first as! UINavigationController
let masterViewController = leftNavController.topViewController as! MainViewController

masterSplitViewController = masterViewController
detailSplitViewController = detailViewController

// Override point for customization after application launch.
let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController
navigationController.topViewController!.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem()
splitViewController.delegate = self

self.window!.rootViewController = splitViewController

当我第一次启动应用程序时,我看到分屏的右侧部分占据了整个屏幕:

enter image description here

如果我旋转屏幕,它就会正确设置(可能是因为两个 View 都出现在屏幕上):

enter image description here

当我在各处设置断点时,我看到右侧的详细 View 在左侧的主视图(项目列表)之前加载,尽管没有被直接调用。我无法更改调用分屏 View 的顺序。我该如何解决这个问题?

更新:

我可以在显示 Split View Controller 之前进行设置:

splitViewController.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible

当我打印它时,在拆分 Controller 的 ViewDidLoad 中:

print(self.preferredDisplayMode.rawValue)

我得到:2,这是 AllVisible。但结果还是一样。

最佳答案

这是 UISplitViewController 的默认行为。仔细看看以下内容-

// An animatable property that controls how the primary view controller is hidden and displayed. A value of `UISplitViewControllerDisplayModeAutomatic` specifies the default behavior split view controller, which on an iPad, corresponds to an overlay mode in portrait and a side-by-side mode in landscape.
@property (nonatomic) UISplitViewControllerDisplayMode preferredDisplayMode NS_AVAILABLE_IOS(8_0);

这是相同定义的关键部分-

on an iPad, corresponds to an overlay mode in portrait and a side-by-side mode in landscape.

此外,如果您想查询 UISplitViewController 的当前状态(显示模式),您应该使用此属性-

// The actual current displayMode of the split view controller. This will never return `UISplitViewControllerDisplayModeAutomatic`.
@property (nonatomic, readonly) UISplitViewControllerDisplayMode displayMode NS_AVAILABLE_IOS(8_0);

请记住,您不能将它与 UISplitViewControllerDisplayModeAutomatic 进行比较,因为-

This will never return UISplitViewControllerDisplayModeAutomatic.

我的建议是将 preferredDisplayMode 设置为您想要的值。在您的情况下,您似乎需要 primary (master) 始终可见。所以这是建议的解决方案-

mySplitVC.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible

为什么它首先加载辅助(细节) Controller ?

如您所见,UISplitViewController 实例始终需要一个详细 View ,无论它当前处于何种 displayMode 状态。所以这是一个很好的电话

  • 首先加载详细 View 。
  • 之后加载主视图(有条件地基于 displayMode)。

希望这对您有所帮助。

关于ios - 为什么我不能在第一次运行时在 UISplitViewController 中将 Master 和 Detail View 并排放置,但在旋转时它可以工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37727911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com