ios - 即使 `edgesForExtendedLayout` 设置为 `top`,状态栏和 toplayout 指南底部 anchor 之间的差距

标签 ios swift

我有一个简单的 View Controller ,只需使用

即可模态呈现
viewController.present(myVC, animated: true, completion: nil)

myVC View Controller 没有任何嵌入式导航 Controller ,在 myVCviewDidLoad 中,我设置的 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

我在 myVCviewDidLoad 中将扩展边指定为顶部

self.edgesForExtendedLayout = .top

UI 看起来像

enter image description here

状态栏和添加的 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/

相关文章:

iphone - iOS 上的实时视频清理

ios - 如何使用 UI 按钮在 swift 中调用新 Controller ?

ios - SQlite密码IOS

ios - 使用 Swift 从 xib/nib 实例化 UIView

ios - 登录 Twitter 有时会失败

ios - 当应用程序从重定向的应用程序重新获得焦点时的回调

ios - 助手类中的断言被忽略

带有可选数组的 Swift 4 自定义通用结构表现得很奇怪?

json - UISearchBar 从 Json 获取数据(SWIFT 3)

ios - UIPageControl 显示当前页面