如何将视图滑出iPhone X的可见区域?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将视图滑出iPhone X的可见区域?相关的知识,希望对你有一定的参考价值。

当导航栏隐藏时,我希望视图在可见区域外滑动。

该视图附加到safeAreaLayoutGuide:

topConstraint = myView.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor)

要将其滑出,约束会更改:

topConstraint.constant = hidden ? -(myView.frame.height) : 0

这适用于iPhone 7但不适用于iPhone X.当导航被隐藏时,view.topAnchorview.safeAreaLayoutGuide.topAnchor之间存在差距。

最简单的方法是将视图附加到导航栏的底部锚点,但尝试此操作时应用程序崩溃:

topConstraint = myView.topAnchor.constraint(equalTo: navigationController!.navigationBar.bottomAnchor)

那么我怎样才能将myView滑出可见区域?

答案

解决方案是改变整个约束,而不仅仅是常量:

// Deactivate current constraint
myViewTopConstraint.isActive = false

if #available(ios 11.0, *) {

    // Set new constraint
    myViewTopConstraint = hidden
        ? myView.bottomAnchor.constraint(equalTo: view.topAnchor)
        : myView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)

} else {
    // Set new constraint
    myViewTopConstraint = hidden
        ? myView.bottomAnchor.constraint(equalTo: view.topAnchor)
        : myView.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor)
}

// Activate new constraint
myViewTopConstraint.isActive = true

此布局更改也是可动画的。

另一答案

替换以下行

topConstraint = myView.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor)

if !hidden {

    if #available(iOS 11.0, *) {
        topConstraint = myView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)
    } else {
        topConstraint = myView.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor)
    }

} else {
     topConstraint = myView.topAnchor.constraint(equalTo: view.topAnchor)
}        

以上是关于如何将视图滑出iPhone X的可见区域?的主要内容,如果未能解决你的问题,请参考以下文章

如何从活动中更改片段中视图的可见性

如何避免 iPhone X 上的视图剪辑

滑入/滑出子视图控制器在 Swift 中的父视图控制器上部分可见

iPhone通过滑出表格视图来滚动UITableview

如何将集合视图单元格滚动到可见区域的中间

如何让 UITabBar 在 iPhone X 上扩展到底部?