Swift: 在 UIWebview 滚动时隐藏 UIStackView
Swift: Hide UIStackView on UIWebview Scroll
我有一个 UIWebview,上面是一个 UIStackView。我想 hide 和 show 带有 animation 的 stackview 在 webview 中滚动,就像在chrome 浏览器。
如何实现?
P.S:这个没用
ScrollView
有 scrollViewDidScroll
,您可以使用它来检测滚动并使用 UIView
中的方法 animate(withDuration duration: TimeInterval, animations: @escaping () -> Swift.Void)
来更改 StackView
的高度。这可能是最简单的解决方案。
编辑:
如果您想更早地检测交互,请尝试 scrollViewWillBeginDragging(_ scrollView: UIScrollView)
。如果这也不能解决您的问题,请尝试创建您自己的自定义手势并将其添加到滚动视图。
我在遵循 Axel 的 建议后开始工作。
这是代码:
var lastContentOffset: CGPoint!
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
lastContentOffset = scrollView.contentOffset
}
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
if lastContentOffset.y > scrollView.contentOffset.y {
print("Going up!")
if topBarStackView.isHidden == true{
UIView.animate(withDuration: 0.2, animations: {
self.topBarStackView.isHidden = false
})
}
} else {
print("Going down!")
if topBarStackView.isHidden == false {
UIView.animate(withDuration: 0.2, animations: {
self.topBarStackView.isHidden = true
})
}
}
}
我有一个 UIWebview,上面是一个 UIStackView。我想 hide 和 show 带有 animation 的 stackview 在 webview 中滚动,就像在chrome 浏览器。
如何实现?
P.S:这个没用
ScrollView
有 scrollViewDidScroll
,您可以使用它来检测滚动并使用 UIView
中的方法 animate(withDuration duration: TimeInterval, animations: @escaping () -> Swift.Void)
来更改 StackView
的高度。这可能是最简单的解决方案。
编辑:
如果您想更早地检测交互,请尝试 scrollViewWillBeginDragging(_ scrollView: UIScrollView)
。如果这也不能解决您的问题,请尝试创建您自己的自定义手势并将其添加到滚动视图。
我在遵循 Axel 的 建议后开始工作。 这是代码:
var lastContentOffset: CGPoint!
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
lastContentOffset = scrollView.contentOffset
}
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
if lastContentOffset.y > scrollView.contentOffset.y {
print("Going up!")
if topBarStackView.isHidden == true{
UIView.animate(withDuration: 0.2, animations: {
self.topBarStackView.isHidden = false
})
}
} else {
print("Going down!")
if topBarStackView.isHidden == false {
UIView.animate(withDuration: 0.2, animations: {
self.topBarStackView.isHidden = true
})
}
}
}