UINavigationBar 和 UINavigationController 的内容之间的差距

Posted

技术标签:

【中文标题】UINavigationBar 和 UINavigationController 的内容之间的差距【英文标题】:Gap between UINavigationBar and the UINavigationController's content 【发布时间】:2016-05-16 17:32:23 【问题描述】:

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

appears 这是 UINavigationController 中的“预期”行为。但是你如何绕过它?

【问题讨论】:

【参考方案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);
        
    

【讨论】:

Screen.height 未知...使用未解析的标识符。有什么新语法吗?【参考方案2】:

我认为 20 像素是由 UIStatusBar 拍摄的。如果您使用带有自动布局的 xib 文件或情节提要,您可以将顶部约束设置为顶部布局指南,以便正确处理 20 像素的差异。

【讨论】:

【参考方案3】:

现在略有不同。也许有一些语法变化,但这为我做到了!是的!!谢谢@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);
            
        
    

【讨论】:

以上是关于UINavigationBar 和 UINavigationController 的内容之间的差距的主要内容,如果未能解决你的问题,请参考以下文章

如何隐藏 UINavigationBar 和 UITabBar 动画?

UINavigationBar 旋转和自动布局

无法缩小 UIWebView 和 UINavigationBar 之间的差距

UINavigationController改变UINavigationBar导航条标题颜色跟字体

UINavigationBar

如何更改 UINavigationBar 标题的字体和文字颜色