【问题标题】:ios 11 navigation bar overlap status barios 11导航栏重叠状态栏
【发布时间】:2018-03-03 21:20:21
【问题描述】:

在 ios 11 中,导航栏与状态栏重叠。如果有人遇到同样的问题,请提供帮助。

【问题讨论】:

  • 这是一个 xcode9 错误.. 你所做的一切都很好,我们都面临同样的问题。我目前正在下载 xcode8.3.3,并将从那里开始工作,直到他们发布修复程序
  • @Faisal 如果您在此处发布错误链接会很有帮助。
  • @Sravan stackoverflow.com/questions/46138245/… 你可以看到人们在这里讨论同样的问题并找出错误
  • @D.Greg 任务似乎没有重复。 “如何更改...”的答案是关于添加自定义导航栏,而目前我看到这个问题与普通的“开箱即用”导航栏有关。

标签: ios11 xcode9


【解决方案1】:

将子视图设置为超级视图的顶部约束...单击以进行编辑约束如果您看到“对齐顶部到:安全区域”将其更改为超级视图以便它重叠

【讨论】:

    【解决方案2】:

    有类似的问题。在我的情况下,原来的视图控制器有自定义导航栏,因此它隐藏了导航栏和状态栏。有

    UIApplication.shared.setStatusBarHidden(true, with: UIStatusBarAnimation.none)
    UIApplication.shared.setStatusBarStyle(.default, animated: false)
    

    在有问题的视图控制器中我有这个:

    UIApplication.shared.setStatusBarStyle(.default, animated: false)
    UIApplication.shared.setStatusBarHidden(false, with: UIStatusBarAnimation.none)
    

    只需将两行按正确的顺序放置即可解决问题:

    UIApplication.shared.setStatusBarHidden(false, with: UIStatusBarAnimation.none)
    UIApplication.shared.setStatusBarStyle(.default, animated: false)
    

    以上所有内容均已弃用,因此另一种可能的解决方法可能是将其更改为隐藏状态栏的推荐方式(此处讨论的尚不理想:setStatusBarHidden deprecated, but only thing that works)。

    【讨论】:

      【解决方案3】:

      不确定这是否是同一个问题,但我们在升级到 iOS 11 时也遇到了这个问题。

      ios 11 custom navbar goes under status bar

      我们手动将导航栏高度设置为 64 并固定到超级视图边缘。符合 UINavigationBarDelegate 协议,实现 UIBarPositioningDelegate 委托方法为我们解决了。

      我们换了

      navigationBar.autoPinEdgesToSuperviewEdgesExcludingEdge(.bottom)
      navigationBar.autoSetDimension(.height, toSize: 64)
      

      ...
        if #available(iOS 11.0, *) {
          navigationBar.topAnchor.constraint(
            equalTo: self.view.safeAreaLayoutGuide.topAnchor
          ).isActive = true
        } else {
          navigationBar.topAnchor.constraint(
            equalTo: topLayoutGuide.bottomAnchor
          ).isActive = true
        }
        navigationBar.autoPinEdge(toSuperviewEdge: .left)
        navigationBar.autoPinEdge(toSuperviewEdge: .right)
        navigationBar.delegate = self
      ...
      
      public func position(for bar: UIBarPositioning) -> UIBarPosition
        return .topAttached
      }
      

      这是对一些自动布局调用使用 purelayout DSL (https://github.com/PureLayout/PureLayout)

      答案发给https://stackoverflow.com/users/341994/matt

      【讨论】:

      • 当我们尝试更改 safrealayoutguide 时,我们遇到了崩溃,原因如下:'无法使用锚激活约束 <0x60400047d980><0x60400047c740>