即使“ edgesForExtendedLayout”设置为“ top”,状态栏和播放向导底部锚点之间也存在间隙

时间:2018-11-15 07:54:30

标签: ios swift

我有一个简单的视图控制器,只需使用

即可对其进行模态渲染
viewController.present(myVC, animated: true, completion: nil)

myVC视图控制器没有任何嵌入式导航控制器,在viewDidLoad的{​​{1}}中,我正在设置视图,其行为应类似于导航栏视图(我不能使用导航栏/导航控制器不幸的是)

这是我以编程方式添加视图的方式

myVC

我在 self.view.addSubview(topView) topView.translatesAutoresizingMaskIntoConstraints = false topView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true topView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true topView.topAnchor.constraint(equalTo: self.topLayoutGuide.bottomAnchor).isActive = true topView.heightAnchor.constraint(equalToConstant: 70).isActive = true 的{​​{1}}中将扩展边指定为顶部

viewDidLoad

用户界面看起来像

enter image description here

状态栏和添加的视图之间有一个间隙,该间隙以黄色边框突出显示,我不确定如何解决:(

请帮助

1 个答案:

答案 0 :(得分:1)

之所以会出现差距,是因为您正在将topView的顶部约束添加到视图的topLayoutGuide.bottom(位于槽口下方一点)。所以这是预期的行为。

摆脱这种差距的最干净方法是将视图控制器嵌入UINavigationController中,并使用真实的导航栏。

但是,如果您不能做到这一点,就必须自己消除差距。

我想不出一种消除此间隙的优雅方法,但您可以向约束添加一个负常数,该常数等于间隙:

topView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: -14).isActive = true

但是您必须确保仅在具有safeAreaLayoutGuide.topAnchor> 0的设备上完成此操作(iPhoneX等)。在所有其他设备上,常数必须为0

就像我说的那样,这不是一个非常稳定或优雅的解决方案,但它可以工作。

顺便说一句,如果可能,应将self.topLayoutGuide.bottomAnchor(不建议使用)更改为view.safeAreaLayoutGuide.topAnchor