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

Posted

技术标签:

【中文标题】如何将 iPhone X 的视图滑出可见区域?【英文标题】:How to slide view out of visible area for iPhone X? 【发布时间】:2018-03-02 14:23:20 【问题描述】:

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

视图附加到 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 滑出可见区域呢?

【问题讨论】:

【参考方案1】:

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

// 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

这种布局变化也是动画的。

【讨论】:

非常好....!您可以将变量用于顶部/底部锚点并在条件流中更改它的值。并将其设置在最后/条件流之后 @Krunal 这实际上是你的答案,感谢你:)【参考方案2】:

以下行替换

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 上的 safeArea 比可视区域小,所以如果您只是将视图放在安全区域的顶部,它仍然是可见的。另一方面,widnow 代表所有可见区域(或窗口的根控制器视图),因此它可能对您更有用。

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

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

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

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

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

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

滚动视图 iPhone 内的文本字段