答案 0 :(得分:1)
不确定这是否是同一个问题,但我们在升级到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)
答案 1 :(得分: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 deprecated, but only thing that works)。
答案 2 :(得分:0)
将子视图设置为超级视图的顶部约束...单击以编辑约束如果您看到“将顶部对齐:安全区域”,请将其更改为超级视图,以便其重叠