我有一个简单的视图控制器,只需使用
即可对其进行模态渲染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
用户界面看起来像
状态栏和添加的视图之间有一个间隙,该间隙以黄色边框突出显示,我不确定如何解决:(
请帮助
答案 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
。