UINavigationBar与UINavigationController内容之间的差距

时间:2016-05-16 17:32:23

标签: ios swift uinavigationcontroller

有一个包含的(嵌入式)UINavigationController可以被拖动以填满屏幕,我发现了一个奇怪的错误。正好在导航控制器覆盖整个屏幕的那一刻,它的主视图调整了大小,在该视图和导航栏之间出现了大约20个点的间隙。

appears这是UINavigationController中的“预期”行为。但你怎么绕过它呢?

3 个答案:

答案 0 :(得分:1)

经过几个小时的努力寻找解决方案(甚至认为没有办法绕过这个问题),我找到了一个效果很好的解决方案。

在我的UINavigationController子类中,我添加了以下覆盖:

override public func viewDidLayoutSubviews() {

    super.viewDidLayoutSubviews();

    if self.view.frame.size.height == Screen.height {
        for childVC in childViewControllers {
            childVC.view.frame = CGRectMake(0, navigationBar.frame.size.height, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height - navigationBar.frame.size.height);
        }
    }
}

答案 1 :(得分:0)

我认为UIStatusBar占用了20个像素。如果您使用具有自动布局的xib文件或故事板,则可以将顶部约束设置为顶部布局指南,以便正确处理20像素差异。

enter image description here

答案 2 :(得分:0)

现在略有不同。也许有些语法有所改变,但这对我有用!是啊!谢谢@Lukas Kalinski

override public func viewDidLayoutSubviews() {

        super.viewDidLayoutSubviews();

        if self.view.frame.size.height == UIScreen.mainScreen().bounds.height {
            for childVC in childViewControllers {
                childVC.view.frame = CGRectMake(0, navigationBar.frame.size.height, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height - navigationBar.frame.size.height);
            }
        }
    }