tabBar 在嵌套 ViewController 中减小视图的大小
tabBar decreasing size of view in nested ViewController
我有一个 UIViewController
(VC
) 嵌套在 UIPageViewController
中的 UINavigationController
中的 UITabBarController
(UIViewController < UIPageViewController < UINavigationController < UITabBarController
) .
因为我想在我的 VC
中使用整个屏幕来显示照片,所以框架也应该覆盖整个屏幕。 UIImageView
应作为子视图添加到我的 VC
的 view
中,由于其他几个原因,我希望用户使用动画使 tabBar
消失( navigationController?.setNavigationBarHidden(true, animated: animated)
在我的 UIPageViewController
中用于隐藏导航栏)。在我看来,通过动画隐藏 tabBar
似乎有点困难,但是:
当我使用动画隐藏栏时,我注意到 VC
中的 view
被标签栏的高度截断了。我很好奇栏上方是什么视图,并在父视图中使用 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
是按以下方式嵌套的:UIViewController < UIPageViewController < UINavigationController < UITabBarController
。我在每一个中都尝试了 edgesForExtendedLayout = []
,甚至是组合,但其中 none 有效。然而,在一个旧项目中,我在 PageVC
和 NavVC
之间放置了一个额外的 VC
,实质上将视图的顺序更改为:UIViewController < AdditionalUIViewController < UIPageViewController < UINavigationController < UITabBarController
。在此附加控制器中设置 edgesForExtendedLayout = []
修复了它。
很高兴问题解决了。但是我仍然无法确定问题发生的原因。如果有人有想法,我会很高兴听到它!
我有一个 UIViewController
(VC
) 嵌套在 UIPageViewController
中的 UINavigationController
中的 UITabBarController
(UIViewController < UIPageViewController < UINavigationController < UITabBarController
) .
因为我想在我的 VC
中使用整个屏幕来显示照片,所以框架也应该覆盖整个屏幕。 UIImageView
应作为子视图添加到我的 VC
的 view
中,由于其他几个原因,我希望用户使用动画使 tabBar
消失( navigationController?.setNavigationBarHidden(true, animated: animated)
在我的 UIPageViewController
中用于隐藏导航栏)。在我看来,通过动画隐藏 tabBar
似乎有点困难,但是:
当我使用动画隐藏栏时,我注意到 VC
中的 view
被标签栏的高度截断了。我很好奇栏上方是什么视图,并在父视图中使用 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
是按以下方式嵌套的:UIViewController < UIPageViewController < UINavigationController < UITabBarController
。我在每一个中都尝试了 edgesForExtendedLayout = []
,甚至是组合,但其中 none 有效。然而,在一个旧项目中,我在 PageVC
和 NavVC
之间放置了一个额外的 VC
,实质上将视图的顺序更改为:UIViewController < AdditionalUIViewController < UIPageViewController < UINavigationController < UITabBarController
。在此附加控制器中设置 edgesForExtendedLayout = []
修复了它。
很高兴问题解决了。但是我仍然无法确定问题发生的原因。如果有人有想法,我会很高兴听到它!