如何扩展 UIView 过去包含 UINavigationController

Posted

技术标签:

【中文标题】如何扩展 UIView 过去包含 UINavigationController【英文标题】:How To Extend UIView Past Containing UINavigationController 【发布时间】:2017-05-09 22:24:36 【问题描述】:

我有一个 UINavigationController 显示为占据部分屏幕的子视图控制器。我在情节提要中使用简单的嵌入转场来展示它。

UINavigationController 的 rootViewController 有一个小的 UIView,我想将它扩展到子视图控制器容器的边界之外。

我的层次结构如下所示:

1) Main View
 2) Container Nav Controller
    3) Root View Controller
      4) UIView which should extend past the bounds of 2

我在所有包含视图上设置了 clipsToBounds = false,但无济于事。

进行一点视图调试会显示UINavigationTransitionView 介于 2 和 3 之间,且 clipsToBounds = false。我很确定这是导致问题的原因(作为企业应用,我不介意使用私有 API)。

如何让视图扩展到所有容器之外?

【问题讨论】:

分享一些代码吧?你如何呈现 UINavigationController? 它是在容器中使用嵌入 segue 呈现的;一切都是通过故事板完成的。我将进行编辑以澄清, 【参考方案1】:

在包含containerView 的ViewController 中,在viewDidLoad() 下,为containerView 创建出口后添加以下代码:

let layoutContainerView = self.containerView.subviews.first;
let navigationTransitionView = layoutContainerView?.subviews.first;
navigationTransitionView?.clipsToBounds = false;

这有点hacky,基本上navigationControllerview的第一个子视图是UINavigationTransitionView,其中clipsToBounds = true

【讨论】:

以上是关于如何扩展 UIView 过去包含 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章

如何将 circleView 进度添加到 UIView 扩展到所有 UIView?

如何在包装器 Swift View 中使用自定义 UIView 的扩展功能?

如何检查 UITableViewCell 是不是包含 UIView

扩展 UIView 高度 (Swift)

带有 CGPath 的 UIView 和另一个包含第一个 UIView 的 UIView。如何将第一个视图放入第二个视图?

自动布局:如何隐藏包含子视图的 UIView?