tabBar 在嵌套 ViewController 中减小视图的大小

tabBar decreasing size of view in nested ViewController

我有一个 UIViewController (VC) 嵌套在 UIPageViewController 中的 UINavigationController 中的 UITabBarController (UIViewController < UIPageViewController < UINavigationController < UITabBarController) .

因为我想在我的 VC 中使用整个屏幕来显示照片,所以框架也应该覆盖整个屏幕。 UIImageView 应作为子视图添加到我的 VCview 中,由于其他几个原因,我希望用户使用动画使 tabBar 消失( navigationController?.setNavigationBarHidden(true, animated: animated) 在我的 UIPageViewController 中用于隐藏导航栏)。在我看来,通过动画隐藏 tabBar 似乎有点困难,但是:

当我使用动画隐藏栏时,我注意到 VC 中的 view 被标签栏的高度截断了。我很好奇栏上方是什么视图,并在父视图中使用 backgroundColors,即 UINavigationControllerUIPageViewController,并设法发现这是 UINavigationController。在之前的项目中,我使用了 edgesForExtendedLayout = [] 并且它完成了我现在想要的。我试过在单个控制器和同时在多个控制器中使用它。到目前为止没有任何效果。

为了获得视图的高度,我使用了 viewDidLayoutSubviews(它比预期的要小)并且我设法使用 viewWillLayoutSubviews 来更正它(print 告诉我它的高度等于 UIScreen.main.bounds.height)。尽管如此,它是不可见的,因此可能被(显然)UINavigationController 剪掉了。

有谁知道导致问题的原因以及如何解决?非常感谢您的帮助!

编辑: 还尝试将 view.frames 设置为彼此相等(VC's = PageVC's 和 PageVC's = NavigationVC's)没有也去做这项工作。调试视图层次结构表明 VC.viewPageVC.view 仍然被切断。

老实说,我没有尝试按照第一条评论中的建议将其设置为半透明,因为我真的想让它保持不透明。我确实做到了,尽管是以一种不太优雅的方式。所以这里是我的问题的解决方案:

回想一下 VC 是按以下方式嵌套的:UIViewController < UIPageViewController < UINavigationController < UITabBarController。我在每一个中都尝试了 edgesForExtendedLayout = [],甚至是组合,但其中 none 有效。然而,在一个旧项目中,我在 PageVCNavVC 之间放置了一个额外的 VC,实质上将视图的顺序更改为:UIViewController < AdditionalUIViewController < UIPageViewController < UINavigationController < UITabBarController。在此附加控制器中设置 edgesForExtendedLayout = [] 修复了它。

很高兴问题解决了。但是我仍然无法确定问题发生的原因。如果有人有想法,我会很高兴听到它!