我有一个简单的 View Controller ,只需使用
即可模态呈现viewController.present(myVC, animated: true, completion: nil)
myVC View Controller 没有任何嵌入式导航 Controller ,在 myVC
的 viewDidLoad
中,我设置的 View 应该表现得像导航栏 View (我不能不幸的是使用导航栏/导航 Controller )
这是我如何以编程方式添加 View
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
我在 myVC
的 viewDidLoad
中将扩展边指定为顶部
self.edgesForExtendedLayout = .top
UI 看起来像
状态栏和添加的 View 之间有一个空白,用黄色边框突出显示,我不确定如何修复:(
请帮忙
最佳答案
之所以会出现间隙,是因为您将 topView 的顶部约束添加到 View 的 topLayoutGuide.bottom
(位于缺口下方)。所以这是预期的行为。
摆脱这种差距的最干净的方法是将您的 View Controller 嵌入 UINavigationController
并使用真正的导航栏。
但如果你做不到,你必须自己消除差距。
我想不出一个优雅的方法来消除这个差距,但你可以在与差距一样高的约束中添加一个负常量:
topView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: -14).isActive = true
但是您必须确保这仅在具有 safeAreaLayoutGuide.topAnchor > 0 的设备上完成。(iPhoneX 等)。在所有其他设备上,常量必须为 0
。
正如我所说,这不是一个非常稳定或优雅的解决方案,但它会起作用。
顺便说一句,如果可能,您应该将 self.topLayoutGuide.bottomAnchor
(已弃用)更改为 view.safeAreaLayoutGuide.topAnchor
。
关于ios - 即使 `edgesForExtendedLayout` 设置为 `top`,状态栏和 toplayout 指南底部 anchor 之间的差距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53314690/