如何将视图滑出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.topAnchor
和view.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的可见区域?的主要内容,如果未能解决你的问题,请参考以下文章