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

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

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

【问题讨论】:

    标签: ios swift 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);
                  }
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多