我有一个UIViewController
(VC
)在UIPageViewController
(UINavigationController
)的UITabBarController
中嵌套在UIViewController < UIPageViewController < UINavigationController < UITabBarController
。
由于我想在整个屏幕上使用我的VC
中的照片,所以框架也应该覆盖整个屏幕。一个UIImageView
将被添加为我的view
的VC
的子视图,并且由于其他几个原因,我希望用户使用动画使tabBar
消失(navigationController?.setNavigationBarHidden(true, animated: animated)
用于我的UIPageViewController
隐藏导航栏)。然而,在我的情况下,通过动画隐藏tabBar
似乎有点困难:
当我使用动画隐藏栏时,我注意到view
中的VC
被标签栏的高度切断。我很好奇是什么视图在酒吧上方,并在父母的观点中与backgroundColors
一起玩,即UINavigationController
和UIPageViewController
,并设法发现这是UINavigationController
。在之前的项目中,我使用了edgesForExtendedLayout = []
,它完成了我现在想要的。我曾尝试在个人控制器和许多控制器中同时使用它。到目前为止,没有任何工作。
为了获得视图的高度,我使用viewDidLayoutSubviews
(它比它应该的小)并且我设法使用viewWillLayoutSubviews
来纠正它(print
告诉我它的高度等于UIScreen.main.bounds.height
)。尽管如此,它是不可见的,因此可能被(显然)UINavigationController
修剪。
有谁知道导致问题的原因以及如何解决问题?我很感激你的帮助!
编辑:还尝试将view.frame
s设置为彼此相等(VC's = PageVC's和PageVC's = NavigationVC's)也没有完成任务。调试视图层次结构表明VC.view
和PageVC.view
仍然被切断。
老实说,我并没有像第一条评论中提出的那样尝试将其设置为半透明,因为我真的想让它保持不透明。我确实设法做到了,尽管方式不那么优雅。所以这里解决了我的问题:
回想一下VC
s以下列方式嵌套:UIViewController < UIPageViewController < UINavigationController < UITabBarController
。我在每一个中尝试过edgesForExtendedLayout = []
,甚至组合,但没有一个工作。然而,在一个旧的项目中,我在VC
和PageVC
之间添加了额外的NavVC
,基本上将视图的顺序改为:UIViewController < AdditionalUIViewController < UIPageViewController < UINavigationController < UITabBarController
。在这个附加控制器中设置edgesForExtendedLayout = []
修复它。
我很高兴问题解决了。然而,我仍然无法理解问题发生的原因。如果有人有想法,我会很高兴听到它!