草庐IT

ios - UISplitViewController:主视图中错误的顶部布局指南与 UISplitViewControllerDisplayModeAllVisible

coder 2024-01-23 原文

我有一个标准的 Split View Controller ,我想在 iPad 上始终显示它的主视图。

在主视图的 viewDidLoad 中,我调用:

self.splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible;

有了这一行,我得到了我想要的效果(总是显示主人)。然而,一件奇怪的事情也发生了:顶部布局指南似乎移动到了主视图的顶部,在导航栏下方。

您可以看到这张图片中的效果,其中 TableView 中的第一个单元格部分隐藏在导航栏后面。事实上,它上方有一个完全隐藏的绿色 View (它是即将出现的内容的占位符)。

如果我将设备旋转到横向然后再旋转回纵向,自动布局会按预期工作,并且 View 会出现在正确的位置:

我已经在 viewDidLoadviewDidAppear 中尝试了以下操作,试图强制 View 正确布局,但没有效果:

[self.splitViewController.view setNeedsLayout];
[self.splitViewController.view layoutIfNeeded];

我正在寻找任何解决方案/建议。

最佳答案

我想用事后的观点来回答我自己的问题。

Apple 在其文档中提到:

When building your app’s user interface, the split view controller is typically the root view controller of your app’s window.

然后警告:

You cannot push a split view controller onto a navigation stack. Although it is possible to install a split view controller as a child in some other container view controllers, doing is not recommended in most cases. Split view controllers are normally installed at the root of your app’s window. For tips and guidance about ways to implement your interface, see iOS Human Interface Guidelines.

虽然他们没有直截了本地说永远不要使用 UISplitViewController 作为非 Root View Controller ,但我发现 UISplitViewController 在非 Root View Controller 中使用时表现不可靠方式。问题中提到的错误只是您会遇到的许多其他问题之一,其中最糟糕的(根据我的经验)不是传播-viewWillAppear-viewDidAppear 调用 subview Controller 。

如果你想要一个非根分割 View ,我建议使用你自己的自定义分割 View 。

关于ios - UISplitViewController:主视图中错误的顶部布局指南与 UISplitViewControllerDisplayModeAllVisible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35779587/

有关ios - UISplitViewController:主视图中错误的顶部布局指南与 UISplitViewControllerDisplayModeAllVisible的更多相关文章

随机推荐