ios 11导航栏重叠状态栏

问题描述 投票:0回答:3

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

ios11 xcode9
3个回答
0
投票

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

参见 ios 11 自定义导航栏位于状态栏下方

我们手动将导航栏高度设置为 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 获取答案


0
投票

有类似的问题。就我而言,事实证明,以前的视图控制器具有自定义导航栏,因此它隐藏了导航栏和状态栏。有

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 已弃用,但唯一有效的方法)。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.